0%

渡劫 C++ 协程(0):前言

C++ 20 标准发布之后,协程终于正式成为 C++ 特性当中的一员。

作为一门本身极其复杂的语言,C++ 秉承着不劝退不开心的原则,将协程的 API 设计得非常复杂。以至于有开发者甚至发出了“这玩意根本就不是给人用的”这样的感叹。

等等,我们是不是搞错了,C++ 协程的 API 确实不是设计给业务开发者直接使用的。实际上,标准当中给出的 API 足够的灵活,也足够的基础,框架的开发者可以基于这些 API 将过去异步的函数改造成协程风格的版本。

没错,这就是 C++。

一门不造轮子就让人不舒服的语言,它总是在用它自己的方式逼着开发者进步。为了帮助大家认识和了解 C++ 协程的设计思路以及基本用法,我计划写几篇文章来介绍一下 C++ 协程的相关特性。

本人 C++ 水平有限,文章内容的安排将尽可能以介绍特性为主,涉及到的框架实现不建议在生产环境当中直接使用。

另外,为了方便读者阅读和实验,文章涉及到的所有源码均已上传于 GitHub: bennyhuo/CppCoroutines

相信大家读完这一系列文章之后,也还是不一定会 C++ 协程 :)

说明:C++ 23 有望基于协程提供不少有用的支持,例如与异步任务密不可分的 executor、network 等等,不过这些内容我暂时不会在后面的文章当中涉及,等 C++ 23 正式发布之后再做补充。


关于作者

霍丙乾 bennyhuo,Kotlin 布道师,Google 认证 Kotlin 开发专家(Kotlin GDE);《深入理解 Kotlin 协程》 作者(机械工业出版社,2020.6);前腾讯高级工程师,现就职于猿辅导