协程 的 主要作用 是 让 单核 GC 变成 单线程 GC, 这样, 在 单核 范围 内, GC 要 工作 时, 不需要 挂起 线程, 只需要 挂起 协程,
挂起 n 个 协程 比 挂起 n 个 线程 的 开销 低 很多, 最起码, 挂起 线程 需要跟 操作系统 通信, 而 挂起 协程 纯粹 是 一个 线程 内 的 一些 代码 执行 。
另外, 因为 n 个 协程 都 只是 一个 线程 内 的 代码 执行, 因此, 可以 对 这些 代码 进行 各种 优化, 就像 优化 普通 的 代码, 一些 函数调用, 包括 内联 和 寄存器优化, 且 可以 减少内存屏障 的 使用次数 。
但 想了一下, 协程 不能 减少 内存屏障 的 使用次数,
要 深化 内联 和 寄存器优化 的 程度, 减少 内存屏障 使用次数, 应该是 把 多个任务编译 成 由 一个 状态机 来执行, 比如 .Net / C# async await, 但 其实 这个技术 很勉强 。