多核和多線程那些事
作為一個程序員,線程,進程,協程這些是我們必須要掌握的最基礎的知識,這就好比數學家必須要學習的基本幾何原理一樣,沒有它們,我們在編程的世界里寸步難行。
并發和并行
并發和并行是我們經常聽到的兩個詞,并發是指同一時間段運行多個程序,比如我們一邊聽歌,一邊打字。而并行指的是同一時刻,強調的是同一個時間點并行運行,很顯然,并行要求需要多核,而并發可以單核切換運行程序,由于cpu的高速運轉,所以看起來并發很類似并行執行,但是本質上兩者是不同的。


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

多線程
可以通過同時在多個內核上運行來利用多核計算機的程序。通常,兩倍的內核等于兩倍的計算能力(對于支持多線程的程序),盡管某些問題受CPU使用率以外的因素的限制。這些問題將不會帶來多線程帶來的巨大收益。
多線程的意義
有時程序需要在特定時間做特定的事情。比如我們有一個可見窗口的程序。該程序可能正在進行大量的后臺數字運算,但是它仍然可以響應用戶事件(例如單擊按鈕并調整其大小),這種情況可以通過異步處理來完成,異步處理將需要您的一個線程重復檢查GUI工作是否間隔執行,暫停正在執行的操作以及處理GUI一段時間。許多事情都是通過這種方式完成的。

然而,處理它的另一種可能更好的方法是使用線程。我們不需要擔心該程序在邏輯運算和GUI管理之間來回切換,操作系統將為您進行管理。即使只有一個內核,您仍然可以運行多個線程,并且操作系統將盡最大努力確保所有正在運行的進程中的所有正在運行的線程都能公平分配CPU時間。
多線程和多核關系
首先兩者本質上沒有必然的聯系,多線程可以運行在單核上,也可以運行在多核上。一個線程可以某一時間段在一個核心上運行,下一刻在另一個核心上運行。
線程是內核調度的最小單位。一個進程可以有多個線程,它們共同完成某個任務。線程是被包裹在進程中的,進程提供了線程運行的資源。
進程之間互不影響,一個進程掛掉,并不影響其它進程,然而一個進程內的一個線程出現問題 ,其它線程也無法正常運行。
CPU
CPU也叫內核,是由單晶硅以一定的生產工藝制造出來的,CPU所有的計算、接受/存儲命令、處理數據都由核心執行。
CPU執行多個程序靠的是它的時鐘,通過時鐘中斷,它可以在不同的程序之間切換,這樣看上去,我們的程序就彷佛在并行執行。
超線程技術
超線程技術為CPU中存在的每個物理核心創建兩個虛擬處理核心。物理核心為虛擬核心提供動力,然后虛擬核心承擔任務處理的責任。每個虛擬內核都彼此相同,盡管兩者都不像物理內核那么強大,但是當不啟用HT時,它們合起來遠遠超過了物理內核的能力。這些虛擬內核的使用使CPU可以實時在內核之間委派任務。
超線程的優點
由CPU密集型操作(例如同時運行兩個苛刻的程序)創建的工作負載(該操作會降低單個物理核心的運行速度,而不論其原始功率如何)都會在處理器的虛擬核心之間分配利用HT技術。使用兩個虛擬內核同時處理任務,處理時間更短,程序打開速度更快,并且在多任務處理期間您的計算機將保持更高的響應速度。簡而言之,超線程可提高處理效率。
多核的優勢
多核技術具有超線程技術的所有優點并且具有更多的優勢。超線程技術為每個物理內核使用兩個虛擬內核來更有效地處理任務,而多內核技術則增加了物理內核。由于單個物理核心比單個虛擬核心更強大,因此雙核處理器比具有超線程的單核處理器更強大。許多較新的型號CPU是超線程和多核的,從而實現了更高的性能。