4

与 Lua 的协程相比,无堆栈 python 实现有什么优势吗?他们有什么区别?

4

1 回答 1

9

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

优点:

  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-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. 没有内置的抢占式调度支持。(必须使用调试钩子)
于 2010-11-04T12:55:04.967 回答