多核和多執行緒那些事

Java鬥帝之路發表於2020-10-09

作為一個程式設計師,執行緒,程式,協程這些是我們必須要掌握的最基礎的知識,這就好比數學家必須要學習的基本幾何原理一樣,沒有它們,我們在程式設計的世界裡寸步難行。

併發和並行

併發和並行是我們經常聽到的兩個詞,併發是指同一時間段執行多個程式,比如我們一邊聽歌,一邊打字。而並行指的是同一時刻,強調的是同一個時間點並行執行,很顯然,並行要求需要多核,而併發可以單核切換執行程式,由於cpu的高速運轉,所以看起來併發很類似並行執行,但是本質上兩者是不同的。

多核和多執行緒那些事

 

多核和多執行緒那些事

 

多核

具有多個邏輯CPU核心並且可以物理上同時執行多條指令的計算機的處理器。計算機的“核心數”是計算機擁有的核心總數。計算機可能具有多個處理器,每個處理器可能具有多個核心;核心數是所有處理器上的核心總數。

多核和多執行緒那些事

 

多執行緒

可以通過同時在多個核心上執行來利用多核計算機的程式。通常,兩倍的核心等於兩倍的計算能力(對於支援多執行緒的程式),儘管某些問題受CPU使用率以外的因素的限制。這些問題將不會帶來多執行緒帶來的巨大收益。

多執行緒的意義

有時程式需要在特定時間做特定的事情。比如我們有一個可見視窗的程式。該程式可能正在進行大量的後臺數字運算,但是它仍然可以響應使用者事件(例如單擊按鈕並調整其大小),這種情況可以通過非同步處理來完成,非同步處理將需要您的一個執行緒重複檢查GUI工作是否間隔執行,暫停正在執行的操作以及處理GUI一段時間。許多事情都是通過這種方式完成的。

多核和多執行緒那些事

 

然而,處理它的另一種可能更好的方法是使用執行緒。我們不需要擔心該程式在邏輯運算和GUI管理之間來回切換,作業系統將為您進行管理。即使只有一個核心,您仍然可以執行多個執行緒,並且作業系統將盡最大努力確保所有正在執行的程式中的所有正在執行的執行緒都能公平分配CPU時間。

多執行緒和多核關係

首先兩者本質上沒有必然的聯絡,多執行緒可以執行在單核上,也可以執行在多核上。一個執行緒可以某一時間段在一個核心上執行,下一刻在另一個核心上執行。

執行緒是核心排程的最小單位。一個程式可以有多個執行緒,它們共同完成某個任務。執行緒是被包裹在程式中的,程式提供了執行緒執行的資源。

程式之間互不影響,一個程式掛掉,並不影響其它程式,然而一個程式內的一個執行緒出現問題 ,其它執行緒也無法正常執行。

CPU

CPU也叫核心,是由單晶矽以一定的生產工藝製造出來的,CPU所有的計算、接受/儲存命令、處理資料都由核心執行。

多核和多執行緒那些事

 

CPU執行多個程式靠的是它的時鐘,通過時鐘中斷,它可以在不同的程式之間切換,這樣看上去,我們的程式就彷佛在並行執行。

超執行緒技術

超執行緒技術為CPU中存在的每個物理核心建立兩個虛擬處理核心。物理核心為虛擬核心提供動力,然後虛擬核心承擔任務處理的責任。每個虛擬核心都彼此相同,儘管兩者都不像物理核心那麼強大,但是當不啟用HT時,它們合起來遠遠超過了物理核心的能力。這些虛擬核心的使用使CPU可以實時在核心之間委派任務。

超執行緒的優點

由CPU密集型操作(例如同時執行兩個苛刻的程式)建立的工作負載(該操作會降低單個物理核心的執行速度,而不論其原始功率如何)都會在處理器的虛擬核心之間分配利用HT技術。使用兩個虛擬核心同時處理任務,處理時間更短,程式開啟速度更快,並且在多工處理期間您的計算機將保持更高的響應速度。簡而言之,超執行緒可提高處理效率。

多核的優勢

多核技術具有超執行緒技術的所有優點並且具有更多的優勢。超執行緒技術為每個物理核心使用兩個虛擬核心來更有效地處理任務,而多核心技術則增加了物理核心。由於單個物理核心比單個虛擬核心更強大,因此雙核處理器比具有超執行緒的單核處理器更強大。許多較新的型號CPU是超執行緒和多核的,從而實現了更高的效能。

看完三件事❤️

如果你覺得這篇內容對你還蠻有幫助,我想邀請你幫我三個小忙:

  1. 點贊,轉發,有你們的 『點贊和評論』,才是我創造的動力。

  2. 關注公眾號 『 Java鬥帝 』,不定期分享原創知識。

  3. 同時可以期待後續文章ing?

 

相關文章