与 Lua 的协程相比,无堆栈 python 实现有什么优势吗?他们有什么区别?
问问题
1937 次
1 回答
9
stackless python 和 tasklets(我没有使用 stackless python 进行任何编程,但我已经阅读了一些关于它是如何实现的细节):
优点:
- 大部分时间都很轻。
- 具有调度程序来管理在当前一个产生后哪个小任务下一个恢复。
- 支持抢占式调度。(即运行 X 指令)
- 小任务之间的通信渠道。
缺点:
- 从小任务中产生时有时需要 C 堆栈。(即当从一些 C 回调中产生时)
带有普通协程的 Lua 5.1:
优点:
- 轻的。
- resume()/yield() 函数允许消费者/生产者的通信模型。
缺点:
- 没有内置调度程序。您必须管理恢复和产生协程。
- 不能从 C 函数、元方法或迭代器中产生。(Lua 5.2 将删除大部分这些限制,LuaJIT 1.1 提供轻量级 c-stack 切换以从任何地方产生)
- 没有内置的抢占式调度支持。(必须使用调试钩子)
Lua 5.1 与ConcurrentLua:
优点:
- 轻的。
- 具有协作上下文切换的调度程序。
- 具有 Erlang 风格的任务之间的消息传递通信。
- 支持节点之间的透明分布式消息传递。
缺点:
- 不能从 C 函数、元方法或迭代器中产生。(同样大多数这些限制在 Lua 5.2 和 LuaJIT 中消失了)
- 没有内置的抢占式调度支持。(必须使用调试钩子)
带有ConcurrentLua的 LuaJIT 2.0 Beta :
优点:
- 轻的。
- 具有协作上下文切换的调度程序。
- 具有 Erlang 风格的任务之间的消息传递通信。
- 支持节点之间的透明分布式消息传递。
- 非常快的 JIT 支持使Lua 比 Python 快得多
缺点:
- 现在可能无法从 C 函数中产生。这可能会在未来的版本中得到支持。
- 没有内置的抢占式调度支持。(必须使用调试钩子)
于 2010-11-04T12:55:04.967 回答