我对协程实现有疑问。
我首先在Lua和stackless-python上看到coroutine
。我可以理解它的概念,以及如何使用yield
关键字,但我无法弄清楚它是如何实现的。
我能解释一下吗?
答案 0 :(得分:3)
通过推送目标地址启动协同处理,然后每个协程交换机将当前PC与堆栈顶部交换,最终必须弹出以终止协同处理。
答案 1 :(得分:2)
另见:Implementing “Generator” support in a custom language。生成器基本上是一种有限形式的(半)协同程序,该问题中讨论的大部分内容也适用于此。
另外:How are exceptions implemented under the hood?虽然异常显然与协同程序非常不同,但它们都有一些共同之处:两者都是高级通用控制流构造。 (事实上,您可以使用协同程序使用异常和异常来实现协同程序。)