1. 程式人生 > 實用技巧 >Python多工-協程和執行緒差異

Python多工-協程和執行緒差異

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理

本篇文章來自騰訊雲 作者:孤獨的明月

( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料。 )

協程

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

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

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

協程和執行緒差異

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

簡單實現協程

import time

def task1(): while True: print("--1--") time.sleep(0.1) yield def task2(): while True: print("--2--") time.sleep(0.1) yield def main(): t1 = task1() t2 = task2() while True: next(t1) next(t2) if __name__ == '__main__
': main() """ --1-- --2-- --1-- --2-- --1-- --2-- --1-- --2-- --1-- --2-- --1-- --2-- --1-- --2-- --1-- --2-- --1-- --2-- --1-- --2-- --1-- 省略.... """