无栈Python的微线程在游戏状态机实现上比Lua的协程有什么优势?

问题描述 投票:0回答:1

无栈Python实现比Lua协程有什么优势吗? 他们有什么区别?

python lua coroutine stackless python-stackless
1个回答
10
投票

无堆栈Python和tasklet

(我还没有使用 Stackless Python 进行过任何编程,但我已经阅读了一些有关它如何实现的详细信息):

优点:
  1. 大多数时候都是轻量级的。
  2. 有调度程序来管理当前任务产生后下一个恢复哪个任务。
  3. 支持抢占式调度。 (即运行 X 指令)
  4. tasklet 之间的通信通道。
缺点:
  1. 从 tasklet 中生成时有时需要 C 堆栈。 (即当从某些 C 回调中产生时)

带有普通协程的 Lua 5.1:

优点:
  1. 轻量级。
  2. resume()/yield() 函数允许消费者/生产者模型的通信。
缺点:
  1. 没有内置调度程序。您必须管理恢复和产生协程。
  2. 无法从 C 函数、元方法或迭代器中产生。 (Lua 5.2 将消除大部分限制,LuaJIT 1.1 提供轻量级的 c 堆栈切换以从任何地方进行收益)
  3. 没有内置的抢占式调度支持。 (必须使用调试挂钩)

Lua 5.1 与 ConcurrentLua:

优点:
  1. 轻量级。
  2. 具有协作上下文切换的调度程序。
  3. 具有 Erlang 风格的任务之间的消息传递通信。
  4. 支持节点之间透明的分布式消息传递。
缺点:
  1. 无法从 C 函数、元方法或迭代器中产生。 (同样,大部分限制在 Lua 5.2 和 LuaJIT 中消失)
  2. 没有内置的抢占式调度支持。 (必须使用调试挂钩)

LuaJIT 2.0 Beta 与 ConcurrentLua:

优点:
  1. 轻量级。
  2. 具有协作上下文切换的调度程序。
  3. 具有 Erlang 风格的任务之间的消息传递通信。
  4. 支持节点之间透明的分布式消息传递。
  5. 非常快的 JIT 支持使得 Lua 比 Python 快得多
缺点:
  1. 现在可能无法从 C 函数中产生。这可能会在未来的版本中得到支持。
  2. 没有内置的抢占式调度支持。 (必须使用调试挂钩)
© www.soinside.com 2019 - 2024. All rights reserved.