線程數與多核CPU的關系,VMware中核數的設置


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調度和分配的基本單位
  • 線程
    是操作系統進行資源(包括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"

引用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM