协程定义
协程,又称微线程,纤程。英文名Coroutine。
首先我们得知道协程是啥?协程其实可以认为是比线程更小的执行单元。 为啥说他是一个执行单元,因为他自带CPU上下文。这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程。 只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的。
协程和线程区别
线程切换从系统层面远不止保存和恢复 CPU上下文这么简单。 操作系统为了程序运行的高效性每个线程都有自己缓存Cache等等数据,操作系统还会帮你做这些数据的恢复操作。 所以线程的切换非常耗性能。但是协程的切换只是单纯的操作CPU的上下文,所以一秒钟切换个上百万次系统都抗的住。
协程拥有自己的寄存器上下文和栈,因此能保留上一次调用的状态。
协程例子
#coding=utf-8
import time
def consumer():#有yield,是一个生成器
r=""
while True:
n=yield r #程序暂停,等待next()信号
# if not n:
# return
print('consumer <--%s..'%n)
time.sleep(1)
r='200 ok'
def producer(c):
next(c)#激活生成器c
n=0
while n<5:
n=n+1
print 'produer-->%s..'%n
cr = c.send(n)#向生成器发送数据
print 'consumer return :',cr
c.close() #生产过程结束,关闭生成器
if __name__ == '__main__':
c = consumer()
producer(c)
参考网址:
http://blog.csdn.net/u014745194/article/details/71657575