多核CPU上python多執行緒並行的乙個假象

2021-06-22 17:36:21 字數 813 閱讀 8010

多核cpu上python多執行緒並行的乙個假象

python-cn(華蟒使用者組,cpyug 郵件列表)上: 關於 python 多執行緒是否能用到多核的問題 相關討論

本機環境: 2核cpu, linux 2.6, python 2.6.2

在python上開啟多個執行緒,由於gil的存在,每個單獨執行緒都會在競爭到gil後才

執行,這樣就干預os內部的程序(執行緒)排程,結果在多核cpu上:

python的多執行緒實際是序列執行的,並不會同一時間多個執行緒分布在多個cpu上執行。

但是這裡有個有趣的現象: python開啟兩個死迴圈的執行緒,在我的2核機器上會有如下

cpu使用情況,每個cpu都維持在50%左右的使用率(見下圖).

難道python的多執行緒可以在多核上並行?

當然不是,在gil存在的python上,多執行緒應該是不可能並行的。

這裡其實有個小細節隱藏在linux的程序排程系統內,當python多執行緒切換時候,linux

排程子系統會兼顧多核的負載情況,linux會把多個執行緒平均分布在多核上跑,這樣不

會導致單個核負載過盛。但是這個並不會讓python多執行緒在多核上並行。

大致cpu使用應該這樣:

cpu0: .. pythread0 _________ pythread0 _________ ..

cpu1: .. _________ pythread1 _________ pythread1 ..

('___'表示cpu空閒,這樣統計下來每個核使用情況在50%左右)

如果python多線**能在多核上並行,那麼這裡每個cpu使用率都應該接近100%.

多核cpu應用場景 CPU多核多執行緒到底有什麼用

你去電子城裝電腦檔口推銷人員都會推銷電腦時會給你說,我這電腦是多少多少核,多少多少執行緒,多大記憶體,多大視訊記憶體之類的。其中我們最關心的無非就cpu,記憶體,顯示卡視訊記憶體,其中最關心的可能就是cpu了。為什麼呢,因為其它的都是死的,只要不是假貨,那些引數都非常容易選。cpu的效能就決定了你電...

關於多執行緒在多核cpu上執行效率的問題

前言 博主最近在比較python和go語言寫的web伺服器的執行效率問題,在看了google搜尋結果後,產生了疑問 1.為什麼python的非同步執行框架tornado效率可以和go語言媲美?2.為什麼隨著執行緒的增加,併發數的增長呈現逐步緩慢的趨勢?注意 為簡化推理過程和理解,以下只考慮執行任務的...

關於多執行緒在多核cpu上執行效率的問題

前言 博主最近在比較python和go語言寫的web伺服器的執行效率問題,在看了google搜尋結果後,產生了疑問 1.為什麼python的非同步執行框架tornado效率可以和go語言媲美?2.為什麼隨著執行緒的增加,併發數的增長呈現逐步緩慢的趨勢?注意 為簡化推理過程和理解,以下只考慮執行任務的...