6

在 Tarantool 中,当 Lua 代码作者希望 Tarantool 安排执行时,是否使用了 Fiber?当 Lua 代码作者想要控制执行时,是否使用协程(在 Tarantool/LuaJIT 进程中)?

4

2 回答 2

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,而纤维在这种情况下工作。

于 2016-03-22T11:12:40.107 回答
3

Fiber 堆栈大于协程之一。它被 mmapp'ed 到 64KB,并且至少是一个操作系统页面(通常是 4KB)。Fiber 上下文切换会产生额外的开销,因为它除了隐藏/恢复协程之外还隐藏/恢复寄存器。Fiber 上下文切换会破坏 LuaJIT 中的 JIT,因为 LuaJIT 无法隐藏/恢复跟踪的执行。与协程不同,fibers 可以很好地与应用服务器中内置的所有非阻塞 IO 配合使用:当一个 Fiber 在 IO 调用上隐式让步时,另一个 Fiber 会启动。但不是另一个协程,当然,你必须小心如果你正在使用它们,你自己。

于 2018-02-10T06:51:35.690 回答