天天看點

python 多線程并發_并發篇-python多線程

大家都知道,作業系統可以同時運作多個任務。比如你一邊聽音樂,一邊聊微信,一遍寫部落格。現在的cpu大都是多核的,但即使是過去的單核cpu也是支援多任務并行執行。單核cpu執行多任務的原理:作業系統交替輪流地執行各個任務。先讓任務1執行0.01秒,然後切換到任務2執行0.01秒,再切換到任務3執行0.01秒...這樣往複地執行下去。由于cpu的執行速度非常快,是以使用者的主觀感受就是這些任務在并行地執行。

多核cpu執行多任務的原理:由于實際應用中,任務的數量往往遠超過cpu的核數,是以作業系統實際上是把這些任務輪流地排程到每個核心上執行。

對于作業系統來說,一個應用就是一個程序。比如打開一個浏覽器,它是一個程序;打開一個記事本,它是一個程序。每個程序有它特定的程序号。它們共享系統的記憶體資源。程序是作業系統配置設定資源的最小機關。

而對于每一個程序來說,比如一個視訊播放器,它必須同時播放視訊和音頻,就至少需要同時運作兩個“子任務”,程序内的這些子任務就是通過線程來完成。線程是最小的執行單元。一個程序它可以包含多個線程,這些線程互相獨立,同時又共享程序所擁有的資源。

在Python中使用線程來避開阻塞任務

線程的使用流程

在任意一個程序裡,任何時刻,隻能執行一個線程

GIL鎖

全局解釋器鎖

Python在設計的時候,還沒有多核處理器的概念。是以,為了設計友善與線程安全,直接設計了一個鎖。這個鎖要求,任何程序中,一次隻能有一個線程在執行。

是以,并不能為多個線程配置設定多個CPU。是以Python中的線程隻能實作并發,而不能實作真正的并行。

但是Python3中的GIL鎖有一個很棒的設計,在遇到阻塞(不是耗時)的時候,會自動切換線程。