co_await expr 的处理规则
先得到 awaitable
- 普通情况下 awaitable = expr
- 如果 promise_type 里有 await_transform(expr),会先调用它
再从 awaitable 得到 awaiter
- 如果能找到合适的 operator co_await(),就调用它
- 否则 awaitable 自己就是 awaiter
然后对 awaiter 调用三件套
- await_ready()
- await_suspend(handle)
- await_resume()
协程帧默认在堆上进行内存分配,如果有成千上万个短生命周期协程,可以:
- 自定义内存获取方法,使用内存池
- 创建协程对象池