2_進程_線程_協程

協程定義

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章