主流的操作系统, 如 Windows, 或者 Linux, 或者 MacOS, 都是抢占式多任务的操作系统, 相关的概念就是 进程->线程 这些, 基本上各种语言通过操作系统提供的 Api, 都能直接获取操作系统提供的这些能力了. 其实操作系统按任务的调度方式来区分, 有以下两种模式:
协程本身的特性, 跟协作式多任务操作系统所提供的机制基本一致, 对于每个 Task, 我们可以多次的中断和继续执行
聊到中断, 其中比较重要的就是执行环境的保存和恢复了, 而上下文的保存能力可以是操作系统直接提供的, 也可以是程序机制自身所提供的了, 综上所述, 大致可以将 c++中的协程的实现方案的迭代看成如下情况:
中断点和重入点的定义
这里以 C++20 的无栈协程来举例的, 通过图中的关键字co_await
, 我们定义了 point1 和 point2 两个成对的中断点和重入点.
**中断点:**协程中断执行的时候, 记录当前的执行状态: