2 回答

TA貢獻1797條經(jīng)驗 獲得超6個贊
進程和 CPU 沒有對應(yīng)關(guān)系。一個進程開兩個線程可以做到占用兩個 core。
進程和 CPU 沒有對應(yīng)關(guān)系,因此不存在獨享 1 個 CPU 的概念。你兩個進程各開兩個線程,可以占用 4 個 CPU。
GIL 每個進程一個。
但是,由于 Python 中 GIL 的存在,Python 一個進程中每個時刻只能有一個線程真正在跑,因此要利用多核優(yōu)勢還得多進程。
多線程"對 IO 密集型有優(yōu)勢"這句話一般是相對于"計算密集型任務(wù)"而言的,這點自然不言而喻。至于用單進程或多進程跑 IO 密集型任務(wù),個人感覺差別不大,畢竟瓶頸在操作系統(tǒng)和硬件上。

TA貢獻1828條經(jīng)驗 獲得超6個贊
是,只要你的進程有2+個線程,就能占滿坑;
不太清楚你對“獨享”的定義是什么。如果是強行設(shè)置處理器相關(guān)性,那無法利用多核的優(yōu)勢,但多線程本身的優(yōu)勢還是在的。要利用多核,不一定只能有一個進程,每個核一個進程也充分利用了呀;
每個進程一個;
沒有錯誤。開子進程,用新的GIL,代價是成本比較高,通信比較麻煩。開子線程,仍然受同一個GIL控制,但是成本比較低。反正GIL在IO的時候都會釋放,所以IO密集型沒必要為了新的GIL去付那么高的成本。
成本來自兩方面:切換成本和通信成本。
切換成本:進程比線程高;
通信成本:不同處理器比同處理器高。
我們實際操作中一般給每個核一個進程,然后讓每個進程管理自己的線程,就可以同時最小化兩個成本。
- 2 回答
- 0 關(guān)注
- 296 瀏覽
添加回答
舉報