python之协程
一、协程理论 1.1 协程产生的背景 之前我们学习了线程、进程的概念,了解了在操作系统中 进程是资源分配的最小单位,线程是CPU执行的最小单位。 随着我们对于效率的追求不断提高, 基于单线程来实现并发 又成为一个新的课题,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发。这样就可以节省创建线进程所消耗的时间。 本节我们就基于单线程来实现并发,首先我们要回顾一下并发的本质: 切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制) (1)该任务发生了阻塞 (2)该任务计算时间过长或有个更高级的程序替代它 ps:在介绍进程理论时,提及进程的三种执行状态,而线程才是执行单位,所以也可以将上图理解为线程的三种状态 注意点1 第二种情况本质上并不能提高效率,只是为了cpu能雨露均沾,实现看起来所有任务被“同时”执行,如果多个任务是纯计算的,单纯的切换反而会降低效率。 1.2 yield实现并发 我们通过yield验证,yield本身就是一种在单线程下可以保存任务运行状态的方法,我们来简单复习一下: #1 yiled可以保存状态,yield的状态保存与操作系统的保存线程状态很像,但是yield是代码级别控制的,更轻量级 #2 send可以把一个函数的结果传给另外一个函数,以此实现单线程内程序之间的切换 yield实现并发的缺点: (1