协程是如何实现的?

Eon*_*nil 5 scheme implementation coroutine

我有一个关于协程实现的问题。我coroutine首先看到的是 Lua 和 stackless-python。我可以理解它的概念以及如何使用yield关键字,但我无法弄清楚它是如何实现的。

我可以得到一些关于它们的解释吗?

use*_*421 4

协程是通过压入目标地址来启动的,然后每个协程切换与堆栈顶部交换当前PC,最终必须弹出以终止协程。

  • +1,如果您可以像在 C 或大多数 Smalltalks 中一样访问堆栈(或者如果您已经实现了*您自己的*堆栈,这基本上就是 Stackless Python 和 Lua VM 所做的),那么这就是执行此操作的方法。 (2认同)