1、协程 --引子
本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态
cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞,另外一种情况是该任务计算的时间过长或有一个优先级更高的程序替代了它
进程的三种状态:
运行、阻塞、就绪
ps:在介绍进程理论时,提及进程的三种执行状态,而线程才是执行单位,所以也可以将上图理解为线程的三种状态
import time # 串行执行 def consumer(res): pass def producer(): res = [] for i in range(100000): res.append(i) return res start = time.time() res = producer() consumer(res) stop = time.time() print(stop - start) # 基于 yield并发执行 import time def consumer(): while True: X = yield def producer(): g = consumer() next(g) for i in range(100000): g.send(i) start = time.time() #基于yield保存状态,实现两个任务直接来回切换,即并发的效果 #PS:如果每个任务中都加上打印,那么明显地看到两个任务的打印是你一次我一次,即并发执行的. producer() stop = time.time() print(stop - start)