標籤:上下 簡單的 英文 寄存器 color 最簡 start producer 輕量級
協程,又稱微線程,纖程。英文名Coroutine。一句話說明什麼是線程:協程是一種使用者態的輕量級線程。
協程擁有自己的寄存器上下文和棧。協程調度切換時,將寄存器上下文和棧儲存到其他地方,在切回來的時候,恢複先前儲存的寄存器上下文和棧。
最大的優勢就是協程極高的執行效率。因為子程式切換不是線程切換,而是由程式自身控制,因此,沒有線程切換的開銷,和多線程比,線程數量越多,協程的效能優勢就越明顯。
第二大優勢就是不需要多線程的鎖機制,因為只有一個線程,也不存在同時寫變數衝突,在協程中控制共用資源不加鎖,只需要判斷狀態就好了,所以執行效率比多線程高很多。
因為協程是一個線程執行,那怎麼利用多核CPU呢?最簡單的方法是多進程+協程,既充分利用多核,又充分發揮協程的高效率,可獲得極高的效能。
import queue,timedef consumer(name): print(‘start‘) while True: new_baozi=yield #產生器遇到next 先返回yield後的值, # 如果遇到send(值)把此值賦給new_baozi,第一次若遇到send(值),值只能是None print(‘%s吃%d號包子 ‘%(name,new_baozi))def producer(): next(con) next(con2) n=0 while n<5: n+=1 print(‘生產%d號包子‘ % n) con.send(n) con2.send(n)if __name__==‘__main__‘: con=consumer(‘c1‘) #建立產生器對象 con2=consumer(‘c2‘) p=producer()
符合什麼條件就能稱之為協程:
- 必須在只有一個單線程裡實現並發
- 修改共用資料不需加鎖
- 使用者程式裡自己儲存多個控制流程的上下文棧
- 一個協程遇到IO操作自動切換到其它協程
python 協程