什么时候用多线程什么时候用多进程呢?GUL
那么在 Python 中什么時(shí)候用多線程什么時(shí)候用多進(jìn)程呢?當(dāng)在CPU-bound(計(jì)算密集型:絕大多數(shù)時(shí)間在計(jì)算) 時(shí)最好用 - 多進(jìn)程, 而在 I/O bound(I/O密集型 : IO 處理 并且 大多時(shí)間是在等待) 的時(shí)候最好用 - 多線程。
python因?yàn)槠淙纸忉屍麈iGIL而無(wú)法通過(guò)線程實(shí)現(xiàn)真正的平行計(jì)算。這個(gè)論斷我們不展開(kāi),但是有個(gè)概念我們要說(shuō)明,IO密集型 vs. 計(jì)算密集型。
IO密集型:讀取文件,讀取網(wǎng)絡(luò)套接字頻繁。
計(jì)算密集型:大量消耗CPU的數(shù)學(xué)與邏輯運(yùn)算,也就是我們這里說(shuō)的平行計(jì)算。
而concurrent.futures模塊,可以利用multiprocessing實(shí)現(xiàn)真正的平行計(jì)算。
核心原理是:concurrent.futures會(huì)以子進(jìn)程的形式,平行的運(yùn)行多個(gè)python解釋器,從而令python程序可以利用多核CPU來(lái)提升執(zhí)行速度。由于子進(jìn)程與主解釋器相分離,所以他們的全局解釋器鎖也是相互獨(dú)立的。每個(gè)子進(jìn)程都能夠完整的使用一個(gè)CPU內(nèi)核。
總結(jié)
以上是生活随笔為你收集整理的什么时候用多线程什么时候用多进程呢?GUL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。