既然python直譯器是單執行緒的,還有進行多執行緒程式設計的必要嗎?

時間 2021-05-31 07:13:58

1樓:

如果你的任務是多執行緒的,那麼必須多執行緒

例如網路通訊,你一邊把自己的話輸進去,一邊收聽別人傳給你的話那麼至少用兩個執行緒

至於以最快速度來計算的任務,多執行緒沒意義

多程序才有意義,可以利用CPU的多核來搞分布式計算,如乙個任務切成4個任務,就在4核同時跑

2樓:Coldwings

多執行緒可以用來幹解決阻塞問題,可以做事件響應機制(或者類似訊號槽的玩意),如果執行瓶頸不在CPU運算而是在IO(網路)上,多執行緒顯然很划算。

覺得執行緒切換開銷大?那協程吧……

覺得GIL不能實質性提高效能?那就多程序吧……對了,你還可以純C構建模組,模組內的多執行緒隨便耍,回頭能給python交代就行。

3樓:gashero

有必要,至少能解決很多IO阻塞問題。

能產生IO阻塞的情況很多,比如網路、磁碟,等等。當發生阻塞時,Python是不耗CPU的,此時如果就乙個執行緒就沒法處理其他事情了。所以對於含有IO阻塞的環境。

多執行緒至少有機會讓你把乙個CPU核心跑到100%。

另乙個用處來自於Python的C擴充套件模組。在擴充套件模組裡是可以釋放GIL的。但釋放GIL期間不應該呼叫任何Python API。

所以,對於一些非常繁重的計算,可以寫成C模組,計算前釋放GIL,計算後重新申請GIL,並將結果返回給Python。這樣就可以讓Python這個程序利用更多的CPU資源。每個Python的執行緒都是OS級別pthread的執行緒。

利用Python來管理這些執行緒比在C層級操作pthread更方便。

4樓:Twiknight

多執行緒最開始就不是用來解決多核利用率問題的。

是用來解決IO占用時CPU閒置問題的。

如果你對此有疑問,請複習作業系統相關章節。

redis 為什麼是單執行緒的?

詩和遠方 說Redis是單執行緒是不準確的,其實是多程序,多執行緒的,但如果說其I O模型是單執行緒那就是對的。接下來我們說說為什麼I O模型要單執行緒。我們用快取的目的無非就是做併發控制,快取資料,對效能都有一定的要求 注意這裡是指吞吐量和響應時間 最原始的方式就是單程序阻塞式I O,這樣我們一次...

多執行緒效能比單執行緒效能差的例子

有人在唱歌 Any kind of sequential program is not a good candidate to be threaded.An example of this is a program that calculates an individual tax return.A...

為什麼有人說 Python 的多執行緒是雞肋呢?

確實雞肋,主要原因是因為GIL。但執行緒依然很有用 很多人提到協程,如果沒有ThreadPoolExecutor很多任務只能阻塞eventloop。編寫c模組的時候,還可以釋放GIL,跑滿多核也不難。這導致對很多科學計算的任務其實用threadpool都能突破GIL限制。 CPython直譯器並不是...