假設我是一個CPU,我如今須要process(吃)一些食物,我如今只有一張嘴。linux
假如我有多張嘴,確定就能夠process更多的食物。這就是multi-core processor所要想要完成的任務。可是因爲某些緣由及限制,有時候沒法實現這種方式。程序員
我只有一張嘴,我能夠用手抓一片食物,送到嘴邊,而後在嘴busy的時候,抓起下一片食物,繼續送到嘴邊。若是出現這種狀況:當個人嘴已經吃完那一片食物了,這個時候手尚未將食物送到嘴邊,這時候個人嘴就處於空閒狀態。假如我有兩隻手,即便個人嘴並不能吃得更快,但個人嘴也不須要浪費任什麼時候間,能夠一直處於busy的狀態。這就是hype-threading(超線程),一個processor,而後加上很智能的調度系統,使得processor能夠一直處於busy的狀態。api
超線程對單線程的任務,也就是後面一部分任務必須依賴於前面一部分任務,並無太大做用。 緩存
好比你要吃一個兩勺冰淇淋錐,你必須先吃掉上面的部分,而後才能吃下面的部分。在這種狀況下,增長更多的嘴或者手,都是沒有什麼意義的。微信
在現實生活中,受益於超線程和多核處理器的常見任務有:多線程
好比編輯視頻,視頻是一幀一幀的,徹底能夠在編輯這一幀的時候同時編輯另一幀。性能
總結一下:超線程的目的,就是使得processor busy,充分利用CPU資源。因此,超線程並無他名字聽上去那麼神奇,fetch
首先須要理清楚CPU核core的關係: 操作系統
超線程是intel開發的,已經有10多年的歷史了,它能夠在同一時刻,執行兩個線程,從而提升了單個CPU core的效率。以下圖所示: 線程
來簡略看一下CPU的發展階段: 剛開始,一個CPU只有一個core,一個CPU只能同時運行一個線程:
接着,CPU設計師開始往一個CPU裏面添加更多的core,如今一個CPU就能夠同時運行多個線程了:
爲了進一步提升CPU的性能,Intel又發明了超線程。超線程把一個物理的core,在邏輯上分紅了兩個虛擬核(two virtual cores)。如今,在操做系統的眼裏,這個2核CPU實際上就是一個4核CPU了。
咱們仍是從最開始、最簡單的提及。
首先是單核CPU,樹莓派使用的就是單核CPU,可是樹莓派依然能夠運行多任務的linux系統。爲何呢?實際上在底層,操做系統在不停地切換不一樣的任務,速度之快到讓你以爲他們是真的同時運行的。
而後是多核CPU,如上所說的,不一樣的core之間在邏輯上是獨立的,他們會共享一些資源。操做系統就能夠給不一樣的core分發不一樣的任務,若是你要運行一個多線程的任務,你擁有的core越多,速度就會越快。
再而後就是超線程了。要在一個core上面實現兩個線程,那麼這個core該怎麼設計呢?
把這種core組合一下,就成了多核CPU,且每一個CPU都支持超線程技術。
接着再來看一個現實生活中的栗子:地鐵過安檢。
把隊伍換成前面說的兩個FRONTEND接口,把安檢員看成是core,每一個接口都能獨立得fetch指令,而後把指令傳遞給core。core在真正執行指令的時候,是會產生競爭的,**因此在性能上來講,一個有超線程能力的單核CPU,是沒法和一個雙核CPU相比的。**只有當其中一個queue阻塞的時候,才能獲得雙倍的性能。通常而言,有超線程的核,性能上是沒有超線程的核的1.25倍。
那麼咱們來作一個計算題:一個6核12線程的CPU,和一個8核8線程的CPU,哪個綜合性能要好一點?
因此,8核8線程的性能還要相對好一點。
關注個人微信公衆號