回覆列表
  • 1 # 皮皮魯的科技星球

    如果想弄清楚多核CPU如何執行,以及執行緒與程序的概念,需要回顧一下計算機軟硬體的知識。我們從早期單核CPU開始。

    早期單核CPU架構

    早期的電路設計能力不支援一個CPU有多核,比較經典的架構如上圖所示。

    一個單核CPU的架構包括:

    Control Unit(CU)起協調管理功能。Arithmetic Logic Unit(ALU)接受控制單元的命令,負責進行加減乘與或非運算。所有資料都存放在暫存器(Register)裡。暫存器以極高的速度與CU和ALU互動,通常小於1納秒。從暫存器的名字可以看出來,裡面的資料是臨時寄存的,這些資料和指令會被ALU和CU拿來立即進行計算。如果暫存器沒有CPU想要的資料,CPU會去記憶體或硬碟中讀取。CPU透過Bus(匯流排)讀取記憶體或其他裝置的資料。計算機中有多條匯流排。

    我們以一個加法運算來解釋上面這些概念。對於一個2 + 2的加法,人類可以直接說出答案,但是換成13234 + 87912,就不得不拿出紙和筆來算一下了。計算機對這兩次計算速度沒有差別,其本質為半導體電路對兩個數字執行加法操作。但與人類不同的是,計算機需要知道兩個問題:

    本次所執行的是哪個指令。該指令的執行物件是什麼。

    因此,控制單元先取指令 Fetch,然後指令譯碼 Decode解析出要執行什麼指令,並確認指令是對哪些資料(運算元 operand)進行操作,並將運算元從主存載入到暫存器中。ALU執行指令 Execute後結果寫回 Store。

    多核

    當單個CPU主頻超過一定範圍後,CPU成本和散熱成了很大的問題,主頻很難突破10GHz。為了獲得更快的計算速度和更好的效能,晶片設計者決定繞過主頻,採用人海戰術,在一塊CPU中增加多個核心(Core)。

    一個核心是一個可以執行指令的獨立單元,它包含了前面所提到的ALU和暫存器,並配備L1和L2 Cache。多個核心共享L3 Cache。

    上圖中是一個多核處理器的電路圖,每個Core旁邊的黑色圓圈分別為L1和L2 Cache。可以看到CPU中,各類Cache佔用了很大的空間。

    個人電腦上的CPU一般是單個Processor,每個Processor有多個Core。伺服器上的CPU是多個Processor,每個Processor有多個Core,提供更多計算核心。支援單個CPU的伺服器被稱為單路伺服器,支援兩個CPU的伺服器被稱為雙路伺服器,支援四個CPU的伺服器被稱為四路伺服器。上圖展示了Intel的四路架構,系統支援四個CPU,假如每塊CPU內有8個核心,系統可對外提供32核計算能力。

    儲存金字塔

    要了解計算機的執行原理,除了CPU,我們還要聊聊記憶體。隨著技術的發展,計算機的速度瓶頸已經變成了超高速的CPU運算速度與落後的資料讀取速度之間的矛盾。CPU計算速度在納秒級別,但是CPU讀取主存的速度竟有百納秒,CPU進行完計算後,要閒置幾十倍的時間,實在是巨大的浪費。從計算本身來說,某個程式一般不需要把硬碟或主存中的所有資料都拿來進行計算,絕大多數時間只需要處理部分熱點資料,因此,把熱點資料載入到快取中能解決絕大多數問題。綜合計算速度、技術水平、生產成本,設計人員給CPU增加了很多中間的快取Cache。

    CPU的暫存器存取速度極快,但是造價成本太高,發熱量大,不能被大量採用。通常,CPU的暫存器只有幾KB。L1 Cache和L2 Cache一般設計在CPU上,訪問延遲在幾納秒只幾十納秒內,主存的訪問延遲在百納秒內。速度越快,意味著成本越高。所以硬體設計是在現有技術水平、期望計算速度、成本、散熱等因素之間所做的trade-off。

    執行緒與程序

    前面都是計算機硬體知識,而執行緒和程序則是作業系統控制這些硬體而創造的軟體概念。

    程序(Process)具有單獨的計算資源,如記憶體空間。

    執行緒(Thread)是程序的一個子集,一個程序預設啟動一個執行緒,也可以透過多執行緒程式設計,啟動多個執行緒,多個執行緒共享共享程序的資源。

    在多核架構出現之前,CPU在某個特定時刻只能執行某個程式,無法並行。就像人在某個時刻只能做一件事情,不可能“吃著火鍋還唱著歌”,因為兩項活動都佔著嘴呢嘛。如果要幹另一件事,就必須把其中一件事停下來。

    但是前面提到,CPU計算速度是納秒級別,記憶體讀寫卻是百納秒,那麼為了充分利用CPU,可以把多項任務的資料都放在快取裡。CPU先“吃會火鍋”,再“唱會歌”,邊吃邊唱,以這種形式實現多執行緒。單個CPU每次切換不同的執行緒任務,會產生一些資源開銷。吃飯和唱歌之間,總要讓人稍微歇歇嘛!

    以網頁瀏覽器為例,瀏覽器開啟一個網頁時通常需要下載網頁中素材,同時也要把資料渲染成畫面。在單核場景下,時間被切成了不同的片段,某段時間只能用來做渲染、快取或下載中的一項任務。每個任務都有優先順序,CPU優先執行高優先順序的任務。比如,瀏覽器開啟一個新網頁時,要第一時間把網頁展示出來,背景音樂下載比較慢,可以等網站渲染好後再下載,所以有時候背景音樂會比網頁晚半分鐘甚至更長。

    多核架構提供給使用者多個可以獨立計算的核心,這也意味著計算機可以同時並行執行多項任務,即平行計算。那麼一個網頁瀏覽器使用一個核渲染網頁,另一個核快取其他素材,第三個核下載背景音樂。

    上圖是我的macOS效能監控的一個軟體(htop),Windows上類似的軟體是任務管理器。圖片綠色橫條上方展示了當前8個CPU核的利用率記憶體利用率,綠色橫條下方是我啟動的多個程序,其中標藍色的是我的Chrome瀏覽器的程序,我還啟動了Photoshop等軟體。

    多核CPU可以執行一個程序裡的多個執行緒嗎?當然可以,這需要程式設計時使用多執行緒技術。

  • 2 # 果兒科技

    多核心處理器相當於多處理器。目前只有伺服器作業系統上的很多程式和桌面版作業系統上少量的應用程式(如PS)支援多核心或多處理器平行計算,也就是多程序。

    超執行緒處理器才是解決單程序多執行緒應用程式計算效率的技術。但是處理器效率又受到自身頻率、快取、記憶體以及io效能影響。所以同樣外部情況下,單核心超執行緒處理器在目前的大多數應用環境下,比雙核心處理器效能好。

    多核心和多處理器不能解決多執行緒問題。而且多執行緒其實還是順序執行,只是利用了指令執行之間由io或其他因素造成的時間空隙,去處理其他執行緒的處理請求。這兩者的理論是不一樣的。

  • 3 # 愛米先生

    目前大多數作業系統不能,通俗的解釋很容易,遊戲界有句名言,一核打價多核圍觀。比如amd因為核心比Intel多所以多核效能強,Intel單核效能強。但是玩遊戲雙核心i3能秒8核心的推土機。就因為一個程序只能跑在一個核。傳統遊戲就一個程序,新的遊戲會拆分成多個程序,絕大多數遊戲目前是2個。幾乎沒2個以上的。

  • 中秋節和大豐收的關聯?
  • 山羊奶如何加工成奶粉?