Python无栈微线程(Stack-less Python's microthread)在游戏状态机的实现中相比Lua的协程有哪些优势?

与 Lua 协程相比,堆叠 Python 实现有什么优势?

它们之间的区别是什么?

原文链接 https://stackoverflow.com/questions/4064594

点赞
stackoverflow用户98107
stackoverflow用户98107

选取哪种协程库?

下面是一些常用的协程库及其优缺点。你可以根据你的需求来选择。

stackless python 和 tasklets

优点:

  1. 大多数情况下都很轻量。
  2. 有调度器来管理哪个任务将在当前任务暂停后恢复。
  3. 支持抢占式调度(即运行 X 条指令)
  4. 支持任务之间的通信。

缺点:

  1. 有时需要C堆栈(即从某些C回调函数中暂停时)。

Lua 5.1 和普通协程

优点:

  1. 轻量。
  2. resume() / yield() 函数允许消费者/生产者模型的通信。

缺点:

  1. 没有内建的调度器。您必须管理协程的暂停和恢复。
  2. 无法从C函数、元方法或迭代器中暂停。(Lua 5.2将去除大部分这些限制,LuaJIT 1.1提供了轻量级的c堆栈切换以从任何地方 yield)
  3. 没有内建的抢占式调度支持。(需要使用调试hook)

Lua 5.1 和 ConcurrentLua

优点:

  1. 轻量。
  2. 具有协作上下文切换调度器。
  3. 采用Erlang风格的消息传递通信方式来管理协程。
  4. 支持节点之间的透明分布式消息传递。

缺点:

  1. 无法从C函数、元方法或迭代器中暂停。(这些限制中的大部分在Lua 5.2和LuaJIT中消失)
  2. 没有内建的抢占式调度支持。(需要使用调试hook)

LuaJIT 2.0 Beta 与 ConcurrentLua

优点:

  1. 轻量。
  2. 具有协作上下文切换调度器。
  3. 采用Erlang风格的消息传递通信方式来管理协程。
  4. 支持节点之间的透明分布式消息传递。
  5. 非常快的JIT支持使 Lua比Python快得多

缺点:

  1. 目前可能无法从C函数中暂停。这个问题可能会在未来的版本中得到支持。
  2. 没有内建的抢占式调度支持。(需要使用调试hook)
2010-11-04 12:55:04