在 Tarantool 中,当 Lua 代码作者希望 Tarantool 安排执行时,是否使用了 Fiber?当 Lua 代码作者想要控制执行时,是否使用协程(在 Tarantool/LuaJIT 进程中)?
2 回答
在 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
,而纤维在这种情况下工作。
Fiber 堆栈大于协程之一。它被 mmapp'ed 到 64KB,并且至少是一个操作系统页面(通常是 4KB)。Fiber 上下文切换会产生额外的开销,因为它除了隐藏/恢复协程之外还隐藏/恢复寄存器。Fiber 上下文切换会破坏 LuaJIT 中的 JIT,因为 LuaJIT 无法隐藏/恢复跟踪的执行。与协程不同,fibers 可以很好地与应用服务器中内置的所有非阻塞 IO 配合使用:当一个 Fiber 在 IO 调用上隐式让步时,另一个 Fiber 会启动。但不是另一个协程,当然,你必须小心如果你正在使用它们,你自己。