渡劫 C++ 协程(0):前言
- 渡劫 C++ 协程(0):前言
- 渡劫 C++ 协程(1):C++ 协程概览
- 渡劫 C++ 协程(2):实现一个序列生成器
- 渡劫 C++ 协程(3):序列生成器的泛化和函数式变换
- 渡劫 C++ 协程(4):通用异步任务 Task
- 渡劫 C++ 协程(5):协程的调度器
- 渡劫 C++ 协程(6):基于协程的挂起实现无阻塞的 sleep
- 渡劫 C++ 协程(7):用于协程之间消息传递的 Channel
- 渡劫 C++ 协程(8):通用 Awaiter
- 渡劫 C++ 协程(9):一个简单的示例
- 渡劫 C++ 协程(10):后记
C++ 20 标准发布之后,协程终于正式成为 C++ 特性当中的一员。
作为一门本身极其复杂的语言,C++ 秉承着不劝退不开心的原则,将协程的 API 设计得非常复杂。以至于有开发者甚至发出了“这玩意根本就不是给人用的”这样的感叹。
等等,我们是不是搞错了,C++ 协程的 API 确实不是设计给业务开发者直接使用的。实际上,标准当中给出的 API 足够的灵活,也足够的基础,框架的开发者可以基于这些 API 将过去异步的函数改造成协程风格的版本。
没错,这就是 C++。
一门不造轮子就让人不舒服的语言,它总是在用它自己的方式逼着开发者进步。为了帮助大家认识和了解 C++ 协程的设计思路以及基本用法,我计划写几篇文章来介绍一下 C++ 协程的相关特性。
本人 C++ 水平有限,文章内容的安排将尽可能以介绍特性为主,涉及到的框架实现不建议在生产环境当中直接使用。
另外,为了方便读者阅读和实验,文章涉及到的所有源码均已上传于 GitHub: bennyhuo/CppCoroutines。
相信大家读完这一系列文章之后,也还是不一定会 C++ 协程 :)
说明:C++ 23 有望基于协程提供不少有用的支持,例如与异步任务密不可分的 executor、network 等等,不过这些内容我暂时不会在后面的文章当中涉及,等 C++ 23 正式发布之后再做补充。
关于作者
霍丙乾 bennyhuo,Google 开发者专家(Kotlin 方向);《深入理解 Kotlin 协程》 作者(机械工业出版社,2020.6);《深入实践 Kotlin 元编程》 作者(机械工业出版社,2023.8);前腾讯高级工程师,现就职于猿辅导
- GitHub:https://github.com/bennyhuo
- 博客:https://www.bennyhuo.com
- bilibili:霍丙乾 bennyhuo
- 微信公众号:霍丙乾 bennyhuo