协程是如何实现的?

发布于 2024-09-14 03:37:24 字数 135 浏览 9 评论 0原文

我有一个关于协程实现的问题。 我首先在 Lua 和 stackless-python 上看到了协程。我可以理解它的概念,以及如何使用 yield 关键字,但我不知道它是如何实现的。

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

I have a question about coroutine implementation.
I saw coroutine first on Lua and stackless-python. I could understand the concept of it, and how to use yield keyword, but I cannot figure out how it is implemented.

Can I get some explanation about them?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

任谁 2024-09-21 03:37:24

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

Coroutining is initiated by pushing the target address, then each coroutine switch exchanges the current PC with the top of the stack, which eventually has to get popped to terminate the coroutining.

暖阳 2024-09-21 03:37:24

另请参阅:以自定义语言实现“生成器”支持。生成器基本上是(半)协程的有限形式,该问题中讨论的大部分内容也适用于此处。

另外:异常是如何在幕后实现的?虽然异常显然与协程有很大不同,但它们都有一些共同点:都是先进的通用控制流结构。 (事实上​​,你可以使用异常来实现协程,也可以使用协程来实现异常。)

See also: Implementing “Generator” support in a custom language. Generators are basically a limited form of (semi-)coroutines, most of what is discussed in that question applies here as well.

Also: How are exceptions implemented under the hood? While exceptions are obviously very different from coroutines, they both have something in common: both are advanced universal control flow constructs. (In fact, you can implement coroutines using exceptions and exceptions using coroutines.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文