一、協程:
單線程實現併發
在應用程序裏控制多個任務的切換+保存狀態
優勢:
應用程序級別速度要遠遠高於操做系統的切換
缺點:
多個任務一旦有一個阻塞沒有切,整個線程都阻塞在原地
該線程內的其餘的任務都不能執行了
一旦引入協程,就須要檢測單線程下全部的IO行爲,
實現遇到IO就切換,少一個都不行,覺得一旦 一個任務阻塞了,整個線程就阻塞了,
其餘的任務即使是能夠計算,可是也沒法運行了
二、協程序的目的:
想要在單線程下實現併發
併發指的是多個任務看起來是同時運行的
併發=切換+保存狀態python
yield實現協程網絡
yield能夠實現協程,可是沒法作出有意義的提高效率的協程併發
gevent模塊的使用spa
from gevent import monkey,spawn;monkey.patch_all() import time def eat(name): print('%s eat 1' %name) time.sleep(3) print('%s eat 2' %name) def play(name): print('%s play 1' %name) time.sleep(4) print('%s play 2' %name) start=time.time() g1=spawn(eat,'egon') #內置的一個模塊 g2=spawn(play,'zmy') g1.join() g2.join() # eat('ooo') # play('rrr') print(time.time() - start) print(g1) print(g2)
練習操作系統
等補全線程
網絡IO模型介紹協程
阻塞IO模型blog
非阻塞IO模型event