首页 > 解决方案 > Lua 实现的是什么牌子的协程?

问题描述

谁能具体告诉我协程 Lua 实现了什么“风味”?我问是因为 Lua 的协程似乎很适合我的一个问题,我希望能够在不同的点暂停一个函数,可能在嵌套函数调用中,然后稍后恢复它。尽管有类似的类似“协程/生成器”的构造,但这在例如 C# 或 JavaScript 中似乎是不可能的。还有哪些其他语言支持这些类型的协程?

标签: luacoroutine

解决方案


可免费获得的 Lua 中的 Coroutines论文说:

Lua 实现了非对称协程的概念,通常表示为半对称或半协程[ Marlin , 1980], [Dahl et al., 1972]。非对称协程工具之所以被称为是因为它们涉及两种类型的控制转移操作:一种用于(重新)调用协程,另一种用于挂起协程,后者将控制权返回给协程调用者。一个非对称协程可以被认为是从属于它的调用者,它们之间的关系类似于被调用例程和调用例程之间的关系。不同的控制规则由对称实现协程工具,它提供了一个单一的转移操作,用于将控制切换到指定的协程。因为对称协程能够在它们之间传递控制,所以据说它们在同一层次上运行。以下论点证明了为什么 Lua 提供非对称协同程序,而不是提供对称设施或两种机制。


推荐阅读