python隨筆系列--多進程多線程併發度初探

大家都知道python中由於GIL這把大鎖的存在,導致python的多線程並不是真正的多線程(不同於java等語言)。首先了解下GIL導致的現象:同一時間只能有一個線程佔有python解釋器(或者,同一時刻只有一個線程對共享資源進行存取);而多進程不受GIL的影響是因爲:每個 fork 的進程有一個單獨的 GIL。關於GIL的詳細內容請自行延申推薦參考

接下來用一個如下的函數(純計算,不涉及I/O)放到死循環裏對多線程和多進程能使用多少從cpu做測試
python隨筆系列--多進程多線程併發度初探
測試機cpu正常情況如下
python隨筆系列--多進程多線程併發度初探

先看不用進程/線程模式:

python隨筆系列--多進程多線程併發度初探
cpu使用情況如下
python隨筆系列--多進程多線程併發度初探

多線程模式:

python隨筆系列--多進程多線程併發度初探
cpu使用情況如下
python隨筆系列--多進程多線程併發度初探

多進程模式:

python隨筆系列--多進程多線程併發度初探
cpu使用情況如下
python隨筆系列--多進程多線程併發度初探
可以看到python中CPU密集的任務,應該優先使用多進程模型;不過對於I/O密集型任務,多線程每個線程遇到I/O操作時,會讓出python解釋器,從而實現I/O等待這個環節的併發,亦可以實現 出比穿行快得多的程序,而且比多進程更輕量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章