協程定義
協程,又稱微線程,纖程。英文名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