1. 程式人生 > >CPU的核、程序和執行緒

CPU的核、程序和執行緒

轉自https://www.cnblogs.com/-new/p/7234332.html

 

一、CPU與核心

物理核

  • 物理核數量=cpu數(機子上裝的cpu的數量)*每個cpu的核心數

虛擬核

  • 所謂的4核8執行緒,4核指的是物理核心。通過超執行緒技術,用一個物理核模擬兩個虛擬核,每個核兩個執行緒,總數為8執行緒。
  • 在作業系統看來是8個核,但是實際上是4個物理核。
  • 通過超執行緒技術可以實現單個物理核實現執行緒級別的平行計算,但是比不上效能兩個物理核。

單核cpu和多核cpu

  • 都是一個cpu,不同的是每個cpu上的核心數
  • 多核cpu是多個單核cpu的替代方案,多核cpu減小了體積,同時也減少了功耗
  • 一個核心只能同時執行一個執行緒

二、程序和執行緒

理解

  • 程序是作業系統進行資源(包括cpu、記憶體、磁碟IO等)分配的最小單位
  • 執行緒是cpu排程和分配的基本單位
  • 我們開啟的微信,瀏覽器都是一個程序
  • 程序可能有多個子任務,比如微信要接受訊息,傳送訊息,這些子任務就是執行緒。
  • 資源分配給程序,執行緒共享程序資源。

對比

對比  程序  執行緒
定義 程序是程式執行的一個實體的執行過程,是系統進行資源分配和調配的一個獨立單位 執行緒是程序執行和執行的最小排程單位
系統開銷 建立撤銷切換開銷大,資源要重新分配和收回 僅儲存少量暫存器的內容,開銷小,在程序的地址空間執行程式碼
擁有資產 資源擁有的基本單位 基本上不佔資源,僅有不可少的資源(程式計數器,一組暫存器和棧)
排程 資源分配的基本單位 獨立排程分配的單位
安全性 程序間相互獨立,互不影響 執行緒共享一個程序下面的資源,可以互相通訊和影響
地址空間 系統賦予的獨立的記憶體地址空間 由相關堆疊暫存器和和執行緒控制表TCB組成,暫存器可被用來儲存執行緒內的區域性變數

 

執行緒切換

  • cpu給執行緒分配時間片(也就是分配給執行緒的時間),執行完時間片後會切換都另一個執行緒。
  • 切換之前會儲存執行緒的狀態,下次時間片再給這個執行緒時才能知道當前狀態。
  • 從儲存執行緒A的狀態再到切換到執行緒B時,重新載入執行緒B的狀態的這個過程就叫上下文切換。
  • 而上下切換時會消耗大量的cpu時間。

執行緒開銷

  • 上下文切換消耗
  • 執行緒建立和消亡的開銷
  • 執行緒需要儲存維持執行緒本地棧,會消耗記憶體

三、序列、併發與並行

待補充

 

四、多核下執行緒選擇

計算密集型

  • 程式主要為複雜的邏輯判斷和複雜的運算。
  • cpu的利用率高,不用開太多的執行緒,開太多執行緒反而會因為執行緒切換時切換上下文而浪費資源。

IO密集型

  • 程式主要為IO操作,比如磁碟IO(讀取檔案)和網路IO(網路請求)。
  • 因為IO操作會阻塞執行緒,cpu利用率不高,可以開多點執行緒,阻塞時可以切換到其他就緒執行緒,提高cpu利用率。