最近在看廖雪峰大神的python教程,看到一段對cpu和io操作的描述,以及與執行緒的關係,覺得寫得很清楚很棒,特此記錄
是否採用多工(也就是多程序/執行緒)的第二個考慮是任務的型別。我們可以把任務分為計算密集型和io密集型。
計算密集型任務由於主要消耗cpu資源,因此,**執行效率至關重要。python這樣的指令碼語言執行效率很低,完全不適合計算密集型任務。對於計算密集型任務,最好用c語言編寫。
第二種任務的型別是io密集型
,涉及到網路、磁碟io的任務都是io密集型任務,這類任務的特點是cpu消耗很少,任務的大部分時間都在等待io操作完成(因為io【博主:按照這個我理解的io就是指把內容從硬碟上讀到記憶體的過程,或者是從網路上接收資訊到本機記憶體的過程】
的速度遠遠低於cpu和記憶體的速度)。對於io密集型任務,任務越多,cpu效率越高,但也有乙個限度。常見的大部分任務都是io密集型任務,比如web應用。
io密集型任務執行期間,99%的時間都花在io上,花在cpu上的時間很少,因此,用執行速度極快的c語言替換用python這樣執行速度極低的指令碼語言,完全無法提公升執行效率。對於io密集型任務,最合適的語言就是開發效率最高(**量最少)的語言,指令碼語言是首選,c語言最差。
CPU核數跟多執行緒的關係
一直以來有這樣的疑惑,單核cpu適合多執行緒嗎?是不是幾個核的cpu開幾個執行緒是最合適的?要說多執行緒就離不開程序,程序和執行緒的區別在這裡就不詳細說了,只將關鍵的幾點 a 程序之間是相互獨立的,不共享記憶體和資料,執行緒之間的記憶體和資料是公用的,每個執行緒只有自己的一組cpu指令 暫存器和堆疊...
CPU密集型 IO密集型與執行緒關係
cpu密集型 cpu bound cpu密集型也叫計算密集型,指的是系統的硬碟 記憶體效能相對cpu要好很多,此時,系統運作大部分的狀況是cpu loading 100 cpu要讀 寫i o 硬碟 記憶體 i o在很短的時間就可以完成,而cpu還有許多運算要處理,cpu loading很高。在多重程...
執行緒數設定技巧 與CPU的關係
1 簡化設定 一般說來,執行緒池的大小可以這樣設定 1 如果是cpu密集型應用,則執行緒池大小設定為n 1 2 如果是io密集型應用,則執行緒池大小設定為2n 1 因為io讀資料或者快取的時候,執行緒等待,此時如果多開執行緒,能有效提高cpu利用率 其中n為cpu的個數 如果一台伺服器上只部署這乙個...