CPU數,核數,processor數的概念
-
CPU數
獨立的中央處理單元,體現在主板上就是有多少個CPU槽位 -
CPU cores
在每一個CPU上,都可能有多核(core),每個核中都有獨立的ALU,FPU,Cache等組件,可以理解為CPU的物理核數。(我們常說4核8線程中的核) -
processor
每一個物理核可以模擬出多個邏輯核,"超線程"技術就是通過采用特殊的指令,把邏輯內核模擬為物理超線程,這樣的核就是processor.是一個處理數據的通道,流水線。可以理解為邏輯核(比如我們常說的4核8線程中的線程) -
查看
- 查看計算機的processor數(虛擬核數)
- 在linux中使用top 然后輸入1,從CPU0到CPUn顯示的就是CPU的虛擬核數(processor)
- 查看物理核數
- 在linux中輸入 cat /proc/cpuinfo 就可以看到CPU cores 和 processor的概念
進程和線程
- 進程
是CPU調度和分配的基本單位 - 線程
是操作系統進行資源(包括CPU,內存,磁盤IO)分配的最小單位 - 關系
打開微信,瀏覽器都是一個進程,一個進程中可能有多個子任務,比如微信接受信息,發送信息,這些子任務都是線程
進程之間無法共享資源,進行通信。但是線程之間可以通信,共享進程的資源
開啟一個進程,就是打來一個軟件,消耗的資源多。但是線程相較進程就會節省很多資源。 - 線程之間的切換
- 分時
將時間平均分配,各個線程之間輪流使用 - 搶占
優先級高的線程搶到資源的概率大
- 分時
- 線程開銷
上下文切換,保存當前線程的執行環境,並恢復要執行線程的環境。
線程創建和消亡的開銷
線程需要保存維持線程本地棧,會消耗內存
當線程多到一定的程度時,就會拖慢系統性能,因為多線程的切換需要資源。所以在線程數應該在性能瓶頸的90%。
多核下線程數量的選擇
- Master-worker模式
針對多任務,我們通常采用Master-worker模型。Master負責分配任務,worker負責執行任務。如果Worker掛掉,就要Master負責重新調度。Hadoop集群即使這樣NameNode管理DataNode.這是由線程切換到節點。 - 計算密集型
程序主要是復雜的邏輯判斷和復雜的運算。比如我們常見的機器學習之類的。
CPU利用里高,不應開太多的線程。因為線程太多會因為線程的上下文切換浪費資源。
計算密集型的任務同時進行的數量應當等於CPU的核心數(processo數,虛擬內核也算) - IO密集型
程序主要是IO操作,比如磁盤IO和網絡IO。比如Hadoop的MR。
因為IO操作會阻塞線程,CPU大量的時間在等待IO操作的完成,因此CPU的利用率不高,可以多開線程,當IO阻塞時就切換到其他就緒的線程,提高CPU的利用率
如果磁盤IO的性能超過了總線的能力,此時的瓶頸就是IO而不再是CPU,線程開的多也沒有意義。因為總線被打滿了,數據過不來。
參數指標查看
- CPU個數 cat /proc/cpuinfo | grep "physical id"
- CPU core cat /proc/cpuinfo | grep "core id"
- CPU processor cat /proc/cpuinfo | grep "processor"