Python基礎 34 協程

2021-09-11 07:30:11 字數 935 閱讀 6691

概述

協程,又稱微執行緒,也稱為使用者級執行緒,在不開闢執行緒的基礎上完成多工,也就是在單執行緒的情況下完成多工,多個任務按照一定順序交替執行,通俗理解只要在def裡面只看到乙個yield關鍵字,就表示它是協程

簡單理解:協程是實現多工的一種方式

(1)無需執行緒上下文切換的開銷,協程避免了無意義的排程,由此可以提高效能(但也因此,程式設計師必須自己承擔排程的責任,同時,協程也失去了標準執行緒使用cpu的能力)

(2)無需原子操作鎖定及同步的開銷

(3)方便切換控制流,簡化程式設計模型

(4)高併發+高擴充套件性+低成本:乙個cpu支援上萬的協程都不是問題。所以很適合用於高併發處理

(1)無法利用多核資源:協程的本質是個單執行緒,它不能同時將單個cpu的多個核用上,協程需要和程序配合才能執行在多cpu上

(1)**

import time

def run_001():

while true:

print("---run001---")

yield

time.sleep(0.5)

def run_002():

while true:

print("---run002---")

yield

time.sleep(0.5)

def main():

r1 = run_001()

r2 = run_002()

while true:

next(r1)

next(r2)

if __name__ == '__main__':

main()

(2)結果

Python基礎 協程

協程是一種使用者態的輕量級執行緒,本質上是單執行緒 協程擁有自己的暫存器上下文和棧。協程排程切換時,將暫存器上下文和棧儲存到其他地方,在切回來的時候,恢復先前儲存的暫存器上下文和棧。使用greenlet實現協程操作,greenlet需要手動進行切換 首先需要使用greenlet建立類似與堆疊空間,然...

python基礎 協程詳解

python的yield不但可以返回乙個值,它還可以接收呼叫者發出的引數。來看例子 傳統的生產者 消費者模型是乙個執行緒寫訊息,乙個執行緒取訊息,通過鎖機制控制佇列和等待,但一不小心就可能死鎖。如果改用協程,生產者生產訊息後,直接通過yield跳轉到消費者開始執行,待消費者執行完畢後,切換回生產者繼...

Python基礎 協程(一)

究竟什麼是協程?1.涉及到同步鎖。2.涉及到執行緒阻塞狀態和可執行狀態之間的切換。3.涉及到執行緒上下文的切換。以上涉及到的任何一點,都是非常耗費效能的操作。next 函式用來建立乙個協程嗷 yield會暫停,當send 的時候才會繼續 python中使用async await來使用協程 impor...