与 Lua 协程相比,无堆栈 python 实现有什么优势? 它们有什么区别?
最佳答案
stackless python 和 tasklet(我没有用 stackless python 做过任何编程,但我已经阅读了一些关于它是如何实现的细节):
优点:
- 大部分时间都是轻量级的。
- 有调度程序来管理在当前 tasklet 产生后下一个恢复哪个 tasklet。
- 支持抢占式调度。 (即运行 X 指令)
- tasklet 之间的通信 channel 。
缺点:
- 有时从 tasklet 产生时需要 C 堆栈。 (即当从一些 C 回调中产生时)
带有普通协程的 Lua 5.1:
优点:
- 轻量级。
- resume()/yield() 函数允许使用消费者/生产者模型进行通信。
缺点:
- 没有内置的调度程序。您必须管理恢复和产生协程。
- 不能从 C 函数、元方法或迭代器中产生。 (Lua 5.2 将消除大部分这些限制,LuaJIT 1.1 提供轻量级 c-stack 切换以从任何地方产生)
- 没有内置的抢占式调度支持。 (必须使用调试 Hook )
Lua 5.1 与 ConcurrentLua :
优点:
- 轻量级。
- 具有协作上下文切换的调度器。
- 具有 Erlang 风格的任务间消息传递通信。
- 支持节点间透明的分布式消息传递。
缺点:
- 不能从 C 函数、元方法或迭代器中产生。 (同样,大多数这些限制在 Lua 5.2 和 LuaJIT 中消失了)
- 没有内置的抢占式调度支持。 (必须使用调试 Hook )
LuaJIT 2.0 测试版 ConcurrentLua :
优点:
- 轻量级。
- 具有协作上下文切换的调度器。
- 具有 Erlang 风格的任务间消息传递通信。
- 支持节点间透明的分布式消息传递。
- 非常快速的 JIT 支持使得 Lua much faster then Python
缺点:
- 现在可能无法从 C 函数中产生。这可能会在未来的版本中得到支持。
- 没有内置的抢占式调度支持。 (必须使用调试 Hook )
关于python - stack-less Python的微线程在游戏状态机实现上比Lua的协程有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4064594/