协程是一种程序组件,是由子例程(过程、函数、例程、方法、子程序)的概念泛化而来的,子例程只有一个入口点且只返回一次,而协程允许多个入口点,可以在指定位置挂起和恢复执行。
协程本质是一种控制抽象,它的价值在于可以简洁优雅地实现一些控制行为。在协程中,控制可以从当前执行上下文跳转到程序的其它位置,
并且可以在之后的任意时刻恢复当前执行上下文,控制从跳出点处继续执行。这种行为与Continuation类似,但协程相比之下更容易理解,某些情况下还更加高效
进程、线程,都是有内核进行调度,有 CPU 时间片的概念,进行 抢占式调度。
协程(用户级线程)完全由用户自己的程序进行调度(协作式调度),需要协程自己主动把控制权转让出去之后,其他协程才能被执行到。
协程如何实现的?
协程是基于线程的。内部实现上,维护了一组数据结构和 n 个线程,真正的执行还是线程,协程执行的代码被扔进一个待执行队列中,由这 n
个线程从队列中拉出来执行。这就解决了协程的执行问题。