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

有帮助吗?

解决方案

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

优点:

  1. 大多数时候都是轻量级的。
  2. 有调度程序来管理当前任务产生后下一个恢复哪个任务。
  3. 支持抢占式调度。(IE。运行 X 指令)
  4. Tasklet 之间的通信通道。

缺点:

  1. 有时在从 tasklet 中生成时需要 C 堆栈。(IE。当从某些 C 回调中产生时)

具有普通协程的 Lua 5.1:

优点:

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

缺点:

  1. 没有内置调度程序。您必须管理恢复和生成协程。
  2. 无法从 C 函数、元方法或迭代器中产生。(Lua 5.2 将消除大部分这些限制,LuaJIT 1.1 提供轻量级的 c 堆栈切换以从任何地方进行屈服)
  3. 没有内置的抢占式调度支持。(必须使用调试挂钩)

Lua 5.1 与 并发Lua:

优点:

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

缺点:

  1. 无法从 C 函数、元方法或迭代器中产生。(同样,大多数这些限制在 Lua 5.2 和 LuaJIT 中消失)
  2. 没有内置的抢占式调度支持。(必须使用调试挂钩)

LuaJIT 2.0 测试版 并发Lua:

优点:

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

缺点:

  1. 现在可能无法从 C 函数中产生。这可能会在未来的版本中得到支持。
  2. 没有内置的抢占式调度支持。(必须使用调试挂钩)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top