0%

第2章:协程基本概念

2.2 协程的分类

可以按照按照调用栈(函数调用栈,用来保存函数调用时的状态信息的数据结构)来分,因为协程需要挂起和恢复,因此对于挂起点的状态保存就极其关键。

2.2.1 按照调用栈分类

根据是否开辟相应的调用栈来分的话可以分为 2 类:

  • 有栈协程,需要额外的栈空间,但是灵活,可以在任意函数调用层级的任意位置挂起

  • 无栈协程, 节省内存,咱 Kotlin 协程一般认为就归为这一类,依靠对协程体本身编译生成的状态机的状态流转来实现控制流

不过,Kotlin 协程可以在挂起函数范围内任意调用层次挂起,换句话说,我们启动一个 Kotlin 协程,可以在其中任意嵌套 suspend 函数 !

2.2.2 按调度方式分类

  • 对称协程: 任何一个协程都是相互独立且平等的,调度权可以在任意协程之间转移

  • 非对称协程:协程出让调度权的目标只能是它的调用者,即协程之间存在调用和非调用关系

可以看出来,对称协程和线程已经非常接近了

2.3 协程的实现举例

列举了各种语言协程的实现,这里先略过。

谢谢你的鼓励