代码之家  ›  专栏  ›  技术社区  ›  sdgfsdh

suspend up和suspend down协程之间有什么区别?

  •  2
  • sdgfsdh  · 技术社区  · 7 年前

    C++社区目前正在讨论暂停和暂停协同程序。

    例如,本提案中提到了暂停: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4453.pdf

    这两个词是什么意思?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Community Mohan Dere    6 年前

    这个术语似乎是用英语解释的 p0099r1: "A low-level API for stackful context switching"

    关于suspend up和suspend down术语的注释术语suspend up 2. 结转 9 暂停(向下)上下文切换。这些术语依赖于特定的 调用C++函数调用操作的可视化 向上传递控制。作者推荐了这些术语 属于
    挂起 . 推荐的术语直接引用 可视化。
    ( ,或无堆栈上下文 调用者,以及一些关于被调用函数 已完成并正在返回结果,或只是暂停和 希望能再次接到电话。被调用的函数体在 这样的方式,如果它暂停调用它再次将直接 控制到最后返回的点。这说明了两者 P0057 6可恢复功能和早期技术,如 推进。Asio合作。 12
    挂起 或 堆栈上下文切换)是基于调用一个函数, 对调用者透明地切换到其他逻辑链 功能激活记录(这可能是,也可能不是连续的 堆叠区域。处理器堆栈指针寄存器(如果有的话)可以是 这描述了N4397 3协同程序以及 Boost.Context,13 Boost.Coroutine2 14 还有纤维。 std::执行上下文<>::运算符()()需要通过调用挂起 语义学。

    p0057 这似乎是主要的合作文件。p0444讨论了试图统一这些文件,但似乎没有任何进展。另请参见 Trip Report: C++ Standards Meeting in Issaquah, November 2016 上面写着:

    如前所述,目前正在努力对一个不同的、堆叠的协同程序风格的建议进行标准化,同时也在探索性地将这两种风格统一到一个共同的语法下。然而,这些建议目前还没有针对协同程序Ts。它们可以替代一个不同的TS(如果一个统一的语法出现,它可能是语法,而不是CONTUTIN TS中的一个,最终合并到C++标准)。

        2
  •  0
  •   xlrg    7 年前

    挂起:

    • 用于无堆栈上下文切换(协同路由…)
    • 因为只有一个堆栈(应用程序堆栈),所以必须删除挂起函数(stackless协程函数)的堆栈帧
    • 否则,在协程被挂起之后执行的其他函数将编写它们自己的堆栈帧,从而损坏挂起的一个的堆栈帧

    暂停:

    • 用于堆叠式上下文切换(协同路由、光纤等)
    • 如果stackful协程被挂起,堆栈帧将保留在堆栈上(因为zhr堆栈特定于/由协程拥有)
    • 只需将堆栈指针更改为另一个堆栈(==切换到另一个堆栈式协程/光纤)