C ++社区当前正在讨论暂停协程和暂停协程。
例如,此提案中提到了下架:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4453.pdf
这两个词是什么意思?
答案 0 :(得分:3)
该术语似乎在Ionic Camera中进行了解释:
关于“暂停”和“暂停”术语的说明术语“暂停” N4232 2 中引入了悬停和悬挂 在P0158 9 中区分无堆栈(suspend-up)和有堆栈( 暂停)上下文切换。这些术语取决于特定的 C ++函数调用操作的可视化,其中调用 函数将控制权“向下”传递,而从函数返回 将控制权“向上”传递。作者建议使用这些术语 返回挂起而不是suspend-up,而是挂起调用 的
暂停。推荐的术语直接引用了 底层C ++操作,无需特定 可视化。
暂停返回(暂停悬浮或“无堆栈”上下文 切换)基于将控制权从被调用函数返回到其功能 调用方,以及有关是否已调用函数的一些指示 已经完成并正在返回结果,或者仅仅是暂停而已, 希望再次被调用。被调用函数的主体编码为 这样的方式-如果暂停-再次调用将直接 控制到最后返回的点。既描述了 P0057 6种可恢复功能和早期技术,例如 Boost.Asio协程。 12
通话暂停(通话暂停,或 “堆栈式”上下文切换)基于调用一个函数, 与调用方透明,切换到其他的逻辑链 功能激活记录。 (这可能是连续的,也可能不是连续的 堆栈区域。处理器的堆栈指针寄存器(如果有)可能会或可能会 不涉及。)这说明了N4397 3个协程以及 Boost.Context,13 Boost.Coroutine2 14 和Boost.Fiber。 15 std :: execution_context <> :: operator()()需要挂起调用 语义。
它们都是旧文件,并且与p0099r1: "A low-level API for stackful context switching"(似乎是主要的协程文件)分开。 p0444讨论了如何统一这些论文,但似乎没有任何地方。另请参见p0057,其中指出:
Coroutines TS包含基于微软原始设计的co_await提议。
如前所述,目前正在努力标准化针对协程不同,堆叠式风味的提案,并进行探索性努力以统一语法统一这两种风味。但是,这些提议目前尚未针对Coroutines TS。他们可能会针对另一种TS(如果出现统一语法,则可能是该语法,而不是Coroutines TS中的语法,最终被合并为C ++标准)。
答案 1 :(得分:0)
每个函数都会创建一个堆栈框架(在堆栈上为本地变量等保留空间)
暂停:
暂停: