第 22.19.3 节
协程是什么
作者
发布于 2026/10/06更新于 2026/10/06
协程(coroutine)关注的是:
一个函数如何暂停,并在之后从暂停的位置继续执行。
它是一种控制流工具,不等于线程,也不天然意味着并行。
一个直观理解
普通函数调用通常是:
进入函数
一直执行
返回结果
函数结束协程更像是:
进入函数
执行一段
暂停
之后恢复
继续执行
再暂停或结束这种能力非常适合表达异步流程。
协程不是线程
线程由操作系统调度,多个线程可能在多个 CPU 核心上同时运行。
协程通常是协作式的:
协程自己在合适的位置暂停
调度器再恢复其他协程所以:
多个协程可以在一个线程里交错执行
协程本身不保证并行如果协程背后配合线程池或异步运行时,才可能和并行执行结合起来。
C++ 协程的关键词
C++20 引入了语言级协程支持,常见关键词包括:
co_await:等待一个可等待对象,并可能暂停当前协程;co_yield:产生一个值,并暂停当前协程;co_return:从协程返回结果。
不过 C++ 标准库只提供了协程机制的底层能力,并没有直接提供完整的高级异步框架。
因此学习 C++ 协程时,通常还需要结合具体库或运行时理解。
协程适合什么场景
协程常见于:
异步 IO;
网络服务器;
定时任务;
生成器;
状态机;
需要把回调式代码写成顺序流程的场景。
本章后续方向
当前先预留协程概念位置。
后续如果继续补充,可以从这些问题展开:
co_await到底等待什么?promise type 是什么?
coroutine handle 是什么?
generator 和 task 有什么区别?
协程怎样和异步 IO、线程池结合?
先理解“协程是可暂停/恢复的控制流”,再去看具体语法会容易很多。

