在游戏的状态机实现中,无栈Python的微线程比Lua的协程有什么优势?
-
27-09-2019 - |
题
无堆栈 python 实现比 Lua 协程有什么优势吗?他们有什么区别呢?
解决方案
stackless python 和 tasklet(我还没有使用 stackless python 进行过任何编程,但我已经阅读了一些有关它如何实现的详细信息):
优点:
- 大多数时候都是轻量级的。
- 有调度程序来管理当前任务产生后下一个恢复哪个任务。
- 支持抢占式调度。(IE。运行 X 指令)
- Tasklet 之间的通信通道。
缺点:
- 有时在从 tasklet 中生成时需要 C 堆栈。(IE。当从某些 C 回调中产生时)
具有普通协程的 Lua 5.1:
优点:
- 轻的。
- resume()/yield() 函数允许消费者/生产者模型的通信。
缺点:
- 没有内置调度程序。您必须管理恢复和生成协程。
- 无法从 C 函数、元方法或迭代器中产生。(Lua 5.2 将消除大部分这些限制,LuaJIT 1.1 提供轻量级的 c 堆栈切换以从任何地方进行屈服)
- 没有内置的抢占式调度支持。(必须使用调试挂钩)
Lua 5.1 与 并发Lua:
优点:
- 轻的。
- 具有协作上下文切换的调度程序。
- 具有 Erlang 风格的任务之间的消息传递通信。
- 支持节点之间透明的分布式消息传递。
缺点:
- 无法从 C 函数、元方法或迭代器中产生。(同样,大多数这些限制在 Lua 5.2 和 LuaJIT 中消失)
- 没有内置的抢占式调度支持。(必须使用调试挂钩)
LuaJIT 2.0 测试版 并发Lua:
优点:
- 轻的。
- 具有协作上下文切换的调度程序。
- 具有 Erlang 风格的任务之间的消息传递通信。
- 支持节点之间透明的分布式消息传递。
- 非常快的 JIT 支持使得 Lua 比 Python 快得多
缺点:
- 现在可能无法从 C 函数中产生。这可能会在未来的版本中得到支持。
- 没有内置的抢占式调度支持。(必须使用调试挂钩)
不隶属于 StackOverflow