何时使用光纤以及何时在Tarantool中使用协同程序?

时间:2016-03-22 10:54:43

标签: tarantool

在Tarantool中,当Lua代码作者希望Tarantool安排执行时,会使用光纤吗?当Lua代码作者希望控制执行时,是否使用了惯例(在Tarantool / LuaJIT过程中)?

2 个答案:

答案 0 :(得分:6)

在Tarantool中,纤维是协同程序的同义词。纤维更多地集成到Tarantool I / O等,你应该使用它们而不是lua协同程序。我们建议你总是使用我们的纤维,而不是Lua协同,因为它们更强大。我们的整个I / O堆栈与它们集成在一起:套接字,文件,net.box,mysql,postgresql等。

链接到文档:http://tarantool.org/doc/reference/fiber.html

有一些任务可以使用协同程序,比如迭代器。同时使用协同程序和纤维是完全有效的,但这可能会引起混淆。臭名昭着的产量可能会因臭名昭着attempt to yield across C-call boundary而失败,而纤维在这种情况下起作用。

答案 1 :(得分:3)

纤维堆叠大于协同程序之一。它的mmapp为64KB,至少是一个OS页面(通常为4KB)。光纤上下文切换会产生额外的开销,因为除了隐藏/恢复协程外,它还隐藏/恢复寄存器。由于LuaJIT无法隐藏/恢复跟踪执行,因此光纤上下文切换会破坏LuaJIT中的JIT。与协同程序不同,光纤适用于内置于应用程序服务器中的所有非阻塞IO:当光纤在IO调用中隐含产生时,另一根光纤会启动。但是当然,不是另一个协程,你必须如果您正在使用它们,请自己处理。