协同程序是如何实现的?

时间:2010-08-08 23:26:25

标签: scheme implementation coroutine

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

我能解释一下吗?

2 个答案:

答案 0 :(得分:3)

通过推送目标地址启动协同处理,然后每个协程交换机将当前PC与堆栈顶部交换,最终必须弹出以终止协同处理。

答案 1 :(得分:2)

另见:Implementing “Generator” support in a custom language。生成器基本上是一种有限形式的(半)协同程序,该问题中讨论的大部分内容也适用于此。

另外:How are exceptions implemented under the hood?虽然异常显然与协同程序非常不同,但它们都有一些共同之处:两者都是高级通用控制流构造。 (事实上​​,您可以使用协同程序使用异常和异常来实现协同程序。)

相关问题