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直譯器並不是...