在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Python/ 關(guān)于python多進(jìn)程、多線程的一些疑問(wèn)

關(guān)于python多進(jìn)程、多線程的一些疑問(wèn)

1、當(dāng)有2個(gè)cpu的時(shí)候,只有一個(gè)進(jìn)程,該進(jìn)程是否獨(dú)享2個(gè)cpu資源?
2、線程是進(jìn)程下面的,如果有兩個(gè)進(jìn)程,分別獨(dú)享1個(gè)cpu,進(jìn)程下有n個(gè)線程,那么理論上這種情況下的多線程是無(wú)法利用多核的優(yōu)勢(shì)的?所以要利用多核,只能有一個(gè)進(jìn)程?
3、python的GIL是每個(gè)進(jìn)程一個(gè)還是整個(gè)只有唯一一個(gè)?
4、既然有GIL,但是又說(shuō)多線程對(duì)“IO密集型”任務(wù)有優(yōu)勢(shì)。我的理解是,任務(wù)的瓶頸在讀寫上,雖然多個(gè)線程間切換也需要cup資源,但是由于計(jì)算任務(wù)并不繁重,所以線程間切換很流暢(線程間切換比進(jìn)程切換所消耗的cpu資源更少),所以比起多進(jìn)程來(lái)多線程在“IO密集型”任務(wù)上比較有優(yōu)勢(shì)。不知道我的理解有沒(méi)有錯(cuò)誤。

請(qǐng)各位高手指點(diǎn),謝謝大家~~

回答
編輯回答
別硬撐
  1. 是,只要你的進(jìn)程有2+個(gè)線程,就能占滿坑;
  2. 不太清楚你對(duì)“獨(dú)享”的定義是什么。如果是強(qiáng)行設(shè)置處理器相關(guān)性,那無(wú)法利用多核的優(yōu)勢(shì),但多線程本身的優(yōu)勢(shì)還是在的。要利用多核,不一定只能有一個(gè)進(jìn)程,每個(gè)核一個(gè)進(jìn)程也充分利用了呀;
  3. 每個(gè)進(jìn)程一個(gè);
  4. 沒(méi)有錯(cuò)誤。開子進(jìn)程,用新的GIL,代價(jià)是成本比較高,通信比較麻煩。開子線程,仍然受同一個(gè)GIL控制,但是成本比較低。反正GIL在IO的時(shí)候都會(huì)釋放,所以IO密集型沒(méi)必要為了新的GIL去付那么高的成本。

成本來(lái)自兩方面:切換成本和通信成本。

  • 切換成本:進(jìn)程比線程高;
  • 通信成本:不同處理器比同處理器高。

我們實(shí)際操作中一般給每個(gè)核一個(gè)進(jìn)程,然后讓每個(gè)進(jìn)程管理自己的線程,就可以同時(shí)最小化兩個(gè)成本。

2018年1月9日 18:49
編輯回答
晚風(fēng)眠
  1. 進(jìn)程和 CPU 沒(méi)有對(duì)應(yīng)關(guān)系。一個(gè)進(jìn)程開兩個(gè)線程可以做到占用兩個(gè) core。
  2. 進(jìn)程和 CPU 沒(méi)有對(duì)應(yīng)關(guān)系,因此不存在獨(dú)享 1 個(gè) CPU 的概念。你兩個(gè)進(jìn)程各開兩個(gè)線程,可以占用 4 個(gè) CPU。
  3. GIL 每個(gè)進(jìn)程一個(gè)。

但是,由于 Python 中 GIL 的存在,Python 一個(gè)進(jìn)程中每個(gè)時(shí)刻只能有一個(gè)線程真正在跑,因此要利用多核優(yōu)勢(shì)還得多進(jìn)程。

  1. 多線程"對(duì) IO 密集型有優(yōu)勢(shì)"這句話一般是相對(duì)于"計(jì)算密集型任務(wù)"而言的,這點(diǎn)自然不言而喻。至于用單進(jìn)程或多進(jìn)程跑 IO 密集型任務(wù),個(gè)人感覺(jué)差別不大,畢竟瓶頸在操作系統(tǒng)和硬件上。
2017年2月11日 08:25