多工18 協程

2021-08-27 08:54:50 字數 1141 閱讀 1042

協程,又稱微執行緒,纖程。英文名coroutine。

協程是python個中另外一種實現多工的方式,只不過比執行緒更小占用更小執行單元(理解為需要的資源)。 為啥說它是乙個執行單元,因為它自帶cpu上下文。這樣只要在合適的時機, 我們可以把乙個協程 切換到另乙個協程。 只要這個過程中儲存或恢復 cpu上下文那麼程式還是可以執行的。

通俗的理解:在乙個執行緒中的某個函式,可以在任何地方儲存當前函式的一些臨時變數等資訊,然後切換到另外乙個函式中執行,注意不是通過呼叫函式的方式做到的,並且切換的次數以及什麼時候再切換到原來的函式都由開發者自己確定

在實現多工時, 執行緒切換從系統層面遠不止儲存和恢復 cpu上下文這麼簡單。 作業系統為了程式執行的高效性每個執行緒都有自己快取cache等等資料,作業系統還會幫你做這些資料的恢復操作。 所以執行緒的切換非常耗效能。但是協程的切換只是單純的操作cpu的上下文,所以一秒鐘切換個上百萬次系統都抗的住。

import time

def work1():

while true:

print("----work1---")

yield

time.sleep(0.5)

def work2():

while true:

print("----work2---")

yield

time.sleep(0.5)

def main():

w1 = work1()

w2 = work2()

while true:

next(w1)

next(w2)

if __name__ == "__main__":

main()

執行結果:

----work1---

----work2---

----work1---

----work2---

----work1---

----work2---

----work1---

----work2---

----work1---

----work2---

----work1---

----work2---

...省略...

多工 協程

示例 import time defwork1 while true print 正在掃地 yield defwork2 while true print 正在搬磚 yield w1 work1 w2 work2 協程肯定是併發執行 while true next w1 next w2 greenl...

Python 多工 協程

高階程式設計技巧 學習筆記 1.1 同步 非同步 1.2 阻塞 非阻塞 2.1 什麼是協程?協程,又稱微執行緒。協程是 python 個中另外一種實現多工的方式,只不過比執行緒更小占用更小執行單元 理解為需要的資源 2.2 python中的協程大概經歷了如下三個階段 最初的生成器變形yield se...

多工非同步協程實現

usr bin env python coding utf 8 import random import time import asyncio async defeat name print s開始吃西瓜啦!name sleep time random.randint 1,3 在非同步協程中如果出...