【并发编程二十一】c++20协程(co_yield、co_return、co_await )
一、协程分类
上一篇我们讲解了协程实现的多种方式,但是我们没有讲解协程的分类。在此我们讲解下。
1、控制机制划分
- 非对称协程(asymmetric coroutines):是跟一个特定的调用者绑定的,协程让出CPU时,只能让回给原调用者。
- 对称协程(symmetric coroutines):则不同,被调协程启动之后就跟之前运行的协程没有任何关系了。
2、有栈(stackfull)/无栈(stackless)划分
有栈协程:(类似线程)每一个协程都会有自己的调用栈。(一般的协程使用栈内存来存储数据)
无栈协程:但是无栈协程不具备数据栈。
无栈协程其实现原理是将执行的方法编译为一个状态机,实现的时候不需要在临时栈和系统栈直接拷贝现场。因此无栈协程的效率和占用的资源更少。当然,有栈协程的代码会更加的简单易读。
(go语言是有栈协程——对go语言不熟悉,未验证)
(python是无栈协程——未验证)