多進(jìn)程、多線程和協(xié)程

簡(jiǎn)單理解一下這三個(gè)東西!

多進(jìn)程:

一個(gè)程序加用到的資源稱之為進(jìn)程,它是操作系統(tǒng)分配資源的基本單位,每個(gè)進(jìn)程都有一個(gè)GIL鎖,它有自己獨(dú)立的內(nèi)存空間,資源消耗大。

多線程:

多線程并不是真正意義上的多任務(wù),因?yàn)檫M(jìn)程有GIL鎖的存在,線程執(zhí)行前要先獲得GIL鎖才可以執(zhí)行,執(zhí)行代碼直到sleep或者python虛擬機(jī)將其掛起,釋放GIL鎖,線程進(jìn)行鎖競(jìng)爭(zhēng),切換線程,會(huì)消耗資源,并且由于GIL鎖的存在,一個(gè)進(jìn)程永遠(yuǎn)只有一個(gè)線程被執(zhí)行,因?yàn)橐@得GIL鎖才可以執(zhí)行。雖然是這樣,并不是說(shuō)多線程沒(méi)用,像IO密集型代碼(文件處理、網(wǎng)絡(luò)爬蟲(chóng)等),多線程能夠有效提升效率(單線程下有IO操作會(huì)進(jìn)行IO等待,造成不必要的時(shí)間浪費(fèi),如果開(kāi)啟了多線程,那么線程A在等待時(shí),會(huì)切換到線程B,可以不浪費(fèi)CPU的資源,從而提升程序執(zhí)行的效率),如果對(duì)于CPU密集型多線程反而是雞肋。

多核CPU可以開(kāi)多進(jìn)程充分利用CPU的效率,每個(gè)進(jìn)程再開(kāi)多線程,節(jié)約IO等待時(shí)間。

協(xié)程:

依賴于線程存在的,利用線程在等待某個(gè)資源的時(shí)候去執(zhí)行其他的函數(shù),像多線程實(shí)現(xiàn)的下載器,一邊在下載文件一邊在保存文件,此時(shí)線程就卡在下載這,這時(shí)候就可以利用協(xié)程,你在等待的時(shí)間,我去執(zhí)行別的函數(shù),協(xié)程一般用gevent模塊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 進(jìn)程是cpu資源分配的最小單位,線程是cpu調(diào)度的最小單位。以前進(jìn)程既是資源分配也是調(diào)度的最小單位,后來(lái)為了更合理...
    nine_9閱讀 695評(píng)論 0 1
  • 目錄 一、開(kāi)啟線程的兩種方式 在python中開(kāi)啟線程要導(dǎo)入threading,它與開(kāi)啟進(jìn)程所需要導(dǎo)入的模塊mul...
    CaiGuangyin閱讀 2,474評(píng)論 1 16
  • 又來(lái)到了一個(gè)老生常談的問(wèn)題,應(yīng)用層軟件開(kāi)發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢? 今天就這個(gè)問(wèn)題開(kāi)始,來(lái)談?wù)劜?..
    tangsl閱讀 4,324評(píng)論 0 23
  • 嘿嘿,還好今天繼續(xù)早起了,繼續(xù)畫(huà)禪繞畫(huà)素材,發(fā)現(xiàn)一個(gè)不太擅長(zhǎng)的了,需要請(qǐng)教小伙伴了! 早晨大都市會(huì)有這么多小鳥(niǎo)兒叫...
    bobo啊bobo閱讀 167評(píng)論 0 1
  • 三大循環(huán):for; while; do while;
    Cookie_hunter閱讀 202評(píng)論 0 0

友情鏈接更多精彩內(nèi)容