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

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

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

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

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

多線程模式:

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

多進程模式:

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

相關文章
相關標籤/搜索