c++20 coroutine

co_await expr 的处理规则

  1. 先得到 awaitable

    • 普通情况下 awaitable = expr
    • 如果 promise_type 里有 await_transform(expr),会先调用它
  2. 再从 awaitable 得到 awaiter

    • 如果能找到合适的 operator co_await(),就调用它
    • 否则 awaitable 自己就是 awaiter
  3. 然后对 awaiter 调用三件套

    • await_ready()
    • await_suspend(handle)
    • await_resume()

协程帧默认在堆上进行内存分配,如果有成千上万个短生命周期协程,可以:

  • 自定义内存获取方法,使用内存池
  • 创建协程对象池