概述
協程,又稱微執行緒,也稱為使用者級執行緒,在不開闢執行緒的基礎上完成多工,也就是在單執行緒的情況下完成多工,多個任務按照一定順序交替執行,通俗理解只要在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...