1. 程式人生 > >多執行緒和CPU的關係

多執行緒和CPU的關係

  1. 什麼是CPU

(1)         Central  Progress  Unit 中央處理器,是一塊超大規模的積體電路,是一臺計算機的運算核心和控制核心。

(2)         CPU包括 運算器,高速緩衝儲存器,匯流排。

(3)         它的工作,主要是解釋計算機中的指令,和處理計算機軟體中的資料。它在計算機中起著最重要的作用,構成了系統的控制中心,對各個應用程式進行統一協調和控制。

 

  1. 執行緒

(1)         程序,一個程序就是一個具有獨立功能的應用程式,關於某個資料集合上的一次執行活動。程序是系統進行資源分配和排程的一個獨立單位。

(2)         執行緒,執行緒是程序的實體,屬於程序,是CPU排程和分派的基本單位。

 資源分配給程序,所有執行緒共享該程序的資源

 

(3)         作業系統的設計,可以歸納為3點。

  1. 以多程序形式,允許多個任務同時執行。
  2. 以多執行緒形式,允許一個任務拆分成多個執行緒執行。
  3. CPU提供協調機制,允許執行緒之間共享資源,防止執行緒之間產生衝突。
  4. CPU和執行緒的關係

(1)         第一階段,單CPU時代,單CPU在同一時間點,只能執行單一執行緒。比如,的某一刻00:00:00 這一秒,只計算1+1=2(假設cpu每秒計算一次)

(2)         第二階段,單CPU多工階段,計算機在同一時間點,並行執行多個執行緒。但這並非真正意義上的同時執行,而是多個任務共享一個CPU,作業系統協調CPU在某個時間點,執行某個執行緒,因為CPU線上程之間切換比較快,給人的感覺,就好像多個任務在同時執行。比如,電腦開了兩個程式qq和qq音樂,假設這兩個程式都只有一個執行緒。人能夠感覺到CPU切換的頻率是一秒一次,假設當前cpu計算速度是1秒1次,那麼我們就能明顯感到卡頓,當聊天,點擊發送按鈕時候,qq音樂就會停止執行。當前cpu計算速度是1秒100次,也就是它能在一秒之內在這兩個程序見切換100次,那麼我們就感不到卡頓,覺得QQ和QQ音樂是同時在執行。

(3)         第三階段,多CPU多工階段,真正實現的,在同一時間點執行多個執行緒。具體到哪個執行緒在哪個CPU執行,這就跟作業系統和CPU本身的設計有關了。

  1. 舉例說明

(1)假設一種極端情況,一臺單核計算機,只執行2個程式A和B。

假設A和B的優先順序相同,A有3個執行緒,B有1個執行緒,那麼CPU分配給A和B的執行時間應該是3:1。

(2)假設同一種情況發生在一臺多核計算機,核1處理A和B各一個執行緒,核2處理A剩下的執行緒。

(3)剛才說的是執行緒只消耗CPU,在實際應用中這種情況是不存在的,程式總會跟資源打交道,比如讀個檔案,查詢資料庫,訪問網路,這個時候多執行緒才能體現出優勢。在一個程序中,讓A先用一下CPU去查詢資料庫,在A查詢資料庫的時候CPU空閒,B就用一CPU去讀檔案,讓C去訪問網路。相對於查詢資料庫,讀取檔案這些操作來說,CPU的計算時間幾乎可以忽略不計。所以,多執行緒,實際上是計算機多種資源的並行運用,跟CPU有幾個核心沒什麼關係。