亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于python多進程、多線程的一些疑問

關于python多進程、多線程的一些疑問

莫回無 2018-07-02 12:13:06
當有2個cpu的時候,只有一個進程,該進程是否獨享2個cpu資源?2、線程是進程下面的,如果有兩個進程,分別獨享1個cpu,進程下有n個線程,那么理論上這種情況下的多線程是無法利用多核的優勢的?所以要利用多核,只能有一個進程?3、python的GIL是每個進程一個還是整個只有唯一一個?4、既然有GIL,但是又說多線程對“IO密集型”任務有優勢。我的理解是,任務的瓶頸在讀寫上,雖然多個線程間切換也需要cup資源,但是由于計算任務并不繁重,所以線程間切換很流暢(線程間切換比進程切換所消耗的cpu資源更少),所以比起多進程來多線程在“IO密集型”任務上比較有優勢。不知道我的理解有沒有錯誤。請各位高手指點,謝謝大家~~
查看完整描述

2 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

  1. 進程和 CPU 沒有對應關系。一個進程開兩個線程可以做到占用兩個 core。

  2. 進程和 CPU 沒有對應關系,因此不存在獨享 1 個 CPU 的概念。你兩個進程各開兩個線程,可以占用 4 個 CPU。

  3. GIL 每個進程一個。

但是,由于 Python 中 GIL 的存在,Python 一個進程中每個時刻只能有一個線程真正在跑,因此要利用多核優勢還得多進程。

  1. 多線程"對 IO 密集型有優勢"這句話一般是相對于"計算密集型任務"而言的,這點自然不言而喻。至于用單進程或多進程跑 IO 密集型任務,個人感覺差別不大,畢竟瓶頸在操作系統和硬件上。


查看完整回答
反對 回復 2018-07-06
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

  1. 是,只要你的進程有2+個線程,就能占滿坑;

  2. 不太清楚你對“獨享”的定義是什么。如果是強行設置處理器相關性,那無法利用多核的優勢,但多線程本身的優勢還是在的。要利用多核,不一定只能有一個進程,每個核一個進程也充分利用了呀;

  3. 每個進程一個;

  4. 沒有錯誤。開子進程,用新的GIL,代價是成本比較高,通信比較麻煩。開子線程,仍然受同一個GIL控制,但是成本比較低。反正GIL在IO的時候都會釋放,所以IO密集型沒必要為了新的GIL去付那么高的成本。

成本來自兩方面:切換成本和通信成本。

  • 切換成本:進程比線程高;

  • 通信成本:不同處理器比同處理器高。

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


查看完整回答
反對 回復 2018-07-06
  • 2 回答
  • 0 關注
  • 299 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號