Python 是運行在解釋器中的語言,查找資料知道, python 中有一個全局鎖( GI),在使用多進程( Threa)的情況下,不能發(fā)揮多核的優(yōu)勢。而使用多進程( Multiprocess),則可以發(fā)揮多核的優(yōu)勢真正地提高效率。
對比實驗
資料顯示,如果多線程的進程是 CPU 密集型的,那多線程并不能有多少效率上的提升,相反還可能會因為線程的頻繁切換,導致效率下降,推薦使用多進程;如果是 IO 密集型,多線程進程可以利用 IO 阻塞等待時的空閑時間執(zhí)行其他線程,提升效率。所以我們根據實驗對比不同場景的效率
(1)引入所需要的模塊
(2)定義 CPU 密集的計算函數
(3)定義 IO 密集的文件讀寫函數
(4) 定義網絡請求函數
(5)測試線性執(zhí)行 IO 密集操作、 CPU 密集操作所需時間、網絡請求密集型操作所需時間
輸出
CPU 密集:95.6059999466、91.57099986076355 92.52800011634827、 99.96799993515015
IO 密集:24.25、21.76699995994568、21.769999980926514、22.060999870300293
網絡請求密集型:4.519999980926514、8.563999891281128、4.371000051498413、4.522000074386597、14.671000003814697
(6)測試多線程并發(fā)執(zhí)行 CPU 密集操作所需時間
(7)測試多線程并發(fā)執(zhí)行 IO 密集操作所需時間
(8)測試多線程并發(fā)執(zhí)行網絡密集操作所需時間
Output : 0.7419998645782471、0.3839998245239258、0.3900001049041748
(9)測試多進程并發(fā)執(zhí)行 CPU 密集操作所需時間
Output : 54.342000007629395、53.437999963760376
(10)測試多進程并發(fā)執(zhí)行 IO 密集型操作
Output : 12.509000062942505、13.059000015258789
(11)測試多進程并發(fā)執(zhí)行 Http 請求密集型操作
Output : 0.5329999923706055、0.4760000705718994
實驗結果
CPU 密集型操作 IO 密集型操作網絡請求密集型操作
通過上面的結果,我們可以看到:
多線程在 IO 密集型的操作下似乎也沒有很大的優(yōu)勢(也許 IO 操作的任務再繁重一些就能體現出優(yōu)勢),在 CPU 密集型的操作下明顯地比單線程線性執(zhí)行性能更差,但是對于網絡請求這種忙等阻塞線程的操作,多線程的優(yōu)勢便非常顯著了
多進程無論是在 CPU 密集型還是 IO 密集型以及網絡請求密集型(經常發(fā)生線程阻塞的操作)中,都能體現出性能的優(yōu)勢。不過在類似網絡請求密集型的操作上,與多線程相差無幾,但卻更占用 CPU 等資源,所以對于這種情況下,我們可以選擇多線程來執(zhí)行。
-
cpu
+關注
關注
68文章
10804瀏覽量
210829 -
python
+關注
關注
55文章
4767瀏覽量
84375
發(fā)布評論請先 登錄
相關推薦
評論