python單程式能否利用多核cpu的測試結論

發表於2016-01-22

在很早的時候,就聽網上的文章說:

python有GIL,所以在單程式內,即使使用多執行緒也無法利用到多核的優勢,同一時刻,python的位元組碼只會執行在一個cpu上。

以前也是奉為真理,直到今天在對自己的python server做效能測試的時候,發現一個python程式的cpu居然達到了120%。

當用c++程式設計的時候,如果使用多執行緒,那麼確實程式cpu超過100%非常正常,但是對python來說,似乎這樣就和網上的文章衝突了。

所以還是決定自己親身試驗一下,編寫程式碼如下:

 

執行環境為: centos6.4 64位, python 2.7.

得到的結果如下:

E588C2D7 1608 42CC B800 AD5338C87F47

可以清楚的看到,pid為31199的python程式cpu達到了787.9%,接近理論能達到的最大值 800%。

而上方的8個cpu也分別達到了近100%的利用率。

 

如果只是按照以上測試結果,確實可以得出的結論:python使用單程式,多執行緒確實能夠使用到多核cpu,並不是網上傳的結論。

但是,還是希望如果有讀者對這塊有更深入的研究能夠進行批評指正,謝謝~


8月15日補充

感謝 la.onger 等幾位博友的討論,現在增加一個測試,用來測試純cpu計算用一個執行緒or多個執行緒完成的總時間的差別,程式碼如下:

輸入結果如下:

使用多執行緒後,比不用多執行緒還慢

為了與c++版做對比,也開發了c++程式碼如下:

輸出結果如下:

可見,c++版確實效能提高了非常多。
由此可見,python的多執行緒程式設計,在多核cpu利用上確實差一些。

相關文章