python协程的理解
一、介绍 什么是并发? 并发的本质就是切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制): 1.任务发生阻塞 2.计算任务时间过长,需要让出cpu给高优先级的程序 协程,又称微线程,是一种用户态的轻量级线程。协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置,当程序中存在大量不需要CPU的操作时(IO),适用于协程。 协程本质上就是一个线程,以前线程任务的切换是由操作系统控制的,遇到I/O自动切换,现在我们用协程的目的就是较少操作系统切换的开销(开关线程,创建寄存器、堆栈等,在他们之间进行切换等),在我们自己的程序里面来控制任务的切换 进程有三种状态,而线程是进程的执行最小单位,所以也是线程的三种状态 二、协程切换 1.yield是一种在单线程下可以保存任务运行状态的方法 1. yiled 可以保存状态,yield的状态保存与操作系统的保存线程状态很像,但是yield是代码级别控制的,更轻量级 2. send 可以把一个函数的结果传给另外一个函数,以此实现单线程内程序之间的切换 通过yield实现任务切换+保存线程: import time def func1(): for i in range(11): print('func1第%s次打印' % i) time