前言
以前我们的程序都是单线程,只有一个控制流,在像Web服务这样的应用里不能同时服务多个用户。后来我们使用多线程,一个用户由一个线程全程负责,CPU根据时间片在线程之间切换,只要CPU切换得够快,用户就感受不到延迟。
但是多线程切换是由操作系统调度的,我们的应用代码无法控制。虽然说,被IO操作阻塞的线程,内核会把它挂起,不参与线程切换。但是线程也不能无限增加,否则CPU时间就花在线程切换和挂起唤醒上了,真正运行代码的时间就少了。
这时候我们就会想,多线程不就是多个控制流嘛,能不能只有一个线程,但有多个控制流,什么时候切换由我们自己决定。当然可以,这就是 **协程(Coroutine)**。