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

时间:2010-10-31 18:58:43

标签: python lua coroutine stackless python-stackless

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

1 个答案:

答案 0 :(得分:9)

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

优点:

  1. 大部分时间都是轻量级的。
  2. 具有调度程序来管理当前的一个tasklet在当前生成后获得简历。
  3. 支持抢先式调度。 (即运行X指令)
  4. 在tasklet之间进行通信的渠道。
  5. 缺点:

    1. 从tasklet中产生时有时需要C-stack。 (即从某些C回调中屈服时)
    2. Lua 5.1带有简单的协同程序:

      优点:

      1. 轻。
      2. resume()/ yield()函数允许消费者/生产者沟通模型。
      3. 缺点:

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

          优点:

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

            1. 不能从C函数,元方法或迭代器中产生。 (这些限制大部分都与Lua 5.2和LuaJIT有关)
            2. 没有内置的抢先式调度支持。 (必须使用调试钩子)
            3. LuaJIT 2.0 Beta与ConcurrentLua

              优点:

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

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