1 协程简介

1.1 从操作系统的调度说起

主流的操作系统, 如 Windows, 或者 Linux, 或者 MacOS, 都是抢占式多任务的操作系统, 相关的概念就是 进程->线程 这些, 基本上各种语言通过操作系统提供的 Api, 都能直接获取操作系统提供的这些能力了. 其实操作系统按任务的调度方式来区分, 有以下两种模式:

  1. 协作式多任务操作系统
  2. 抢占式多任务操作系统

协程本身的特性, 跟协作式多任务操作系统所提供的机制基本一致, 对于每个 Task, 我们可以多次的中断和继续执行

聊到中断, 其中比较重要的就是执行环境的保存和恢复了, 而上下文的保存能力可以是操作系统直接提供的, 也可以是程序机制自身所提供的了, 综上所述, 大致可以将 c++中的协程的实现方案的迭代看成如下情况:

4dfe591ed4994ade2d78dfa13814fa6d.jpg

1.2 协程的执行简介

5c929679e6e21f38b180cff22838a6ff.jpg

中断点和重入点的定义

这里以 C++20 的无栈协程来举例的, 通过图中的关键字co_await, 我们定义了 point1 和 point2 两个成对的中断点和重入点.

**中断点:**协程中断执行的时候, 记录当前的执行状态: