协程
协程,又称为微线程,纤程,英文名Coroutine。
协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。
举个例子:
def A():
print '1'
print '2'
print '3'
def B():
print 'x'
print 'y'
print 'z'
由协程运行结果可能是12x3yz。
因为在执行A的过程中,可能随时中断,去执行B,B也可能在执行过程中中断再去执行A。但协程的特点在于是一个线程执行。
协程和线程的区别:
和多线程相比,协程最大的优势是协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。
第二大优势就是不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。
用户控制切换,自动保存上下文状态,切换之间可以通过参数通信,可用同步的方式实现异步。这是我理解中的协程最重要的几个特征。