python - stack-less Python的微线程在游戏状态机实现上比Lua的协程有什么优势?

标签 python lua coroutine stackless python-stackless

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

最佳答案

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

优点:

  1. 大部分时间都是轻量级的。
  2. 有调度程序来管理在当前 tasklet 产生后下一个恢复哪个 tasklet。
  3. 支持抢占式调度。 (即运行 X 指令)
  4. tasklet 之间的通信 channel 。

缺点:

  1. 有时从 tasklet 产生时需要 C 堆栈。 (即当从一些 C 回调中产生时)

带有普通协程的 Lua 5.1:

优点:

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

缺点:

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

Lua 5.1 与 ConcurrentLua :

优点:

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

缺点:

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

LuaJIT 2.0 测试版 ConcurrentLua :

优点:

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

缺点:

  1. 现在可能无法从 C 函数中产生。这可能会在未来的版本中得到支持。
  2. 没有内置的抢占式调度支持。 (必须使用调试 Hook )

关于python - stack-less Python的微线程在游戏状态机实现上比Lua的协程有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4064594/

相关文章:

c++ - "yield"C++ 关键字,如何从我的函数返回迭代器?

c# - 我的协程并不是真正的例程。为什么这个函数只被调用一次?

python - pip/ python : normal site-packages is not writeable

variables - 第一天 lua - 被 for 循环弄糊涂了

Python (numpy) - 关联两个分箱图

function - Lua 只调用存在的函数?

Lua脚本在redis上插入100000个随机键

c# - 协程中值为 true 后无法返回字符串

python - Python 中的 grep 库输出

python - 在 python 中计算列表中的字符串然后过滤和匹配