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

Eon*_*nil 4 python lua coroutine stackless python-stackless

没有堆栈的python实现比Lua的协同程序有什么优势?它们的区别是什么?

Neo*_*ium 9

stackless python和tasklets(我没有使用无堆栈python进行任何编程,但我已经阅读了一些有关如何实现的细节):

优点:

  1. 大多数时候都很轻量级.
  2. 有调度程序来管理当前的一个tasklet产生后接下来恢复的任务.
  3. 支持抢先式调度.(即运行X指令)
  4. 用于在tasklet之间进行通信的通道.

缺点:

  1. 从tasklet中产生时有时需要C-stack.(即从某些C回调中屈服时)

Lua 5.1带有简单的协程:

优点:

  1. 轻巧.
  2. resume()/ yield()函数允许消费者/生产者沟通模型.

缺点:

  1. 没有内置的调度程序.你必须管理恢复和产生协同程序.
  2. 无法从C函数,元方法或迭代器中产生.(Lua 5.2将删除大部分限制,LuaJIT 1.1提供轻量级c-stack切换以从任何地方产生)
  3. 没有内置的抢先式调度支持.(必须使用调试钩子)

Lua 5.1与ConcurrentLua:

优点:

  1. 轻巧.
  2. 调度程序具有协作上下文切换.
  3. 具有Erlang风格的消息传递任务之间的通信.
  4. 支持节点之间透明的分布式消息传递.

缺点:

  1. 无法从C函数,元方法或迭代器中产生.(再次大多数限制与Lua 5.2和LuaJIT相关)
  2. 没有内置的抢先式调度支持.(必须使用调试钩子)

ConcurrentLua的 LuaJIT 2.0 Beta :

优点:

  1. 轻巧.
  2. 调度程序具有协作上下文切换.
  3. 具有Erlang风格的消息传递任务之间的通信.
  4. 支持节点之间透明的分布式消息传递.
  5. 非常快的JIT支持使Lua比Python快得多

缺点:

  1. 现在可能无法从C函数中屈服.这可能在将来的版本中得到支持.
  2. 没有内置的抢先式调度支持.(必须使用调试钩子)