CPU的核心數(shù)和線程數(shù)分別代表什么?
舉個通俗的例子吧。 CPU就是個銀行,大家排隊存錢取錢辦手續(xù)。
有幾個窗口就是幾個線程,也就是可以“同時”接待的顧客數(shù)量。核心數(shù)相當于職員數(shù)量,也就是真正干活的人。4核心4線程,四個職員四個窗口,一個職員負責一個窗口,這沒啥好說的。4核心8線程,四個職員八個窗口,一個職員負責兩個窗口,不過職員沒有分身術,職員A在1號窗口干活的時候他就沒法同時處理2號窗口。這叫超線程(Hyperthread)。那4核心8線程跟4核心4線程比有什么區(qū)別呢?或者說超線程有什么好處呢? 這要分情況說。 如果來了4個儲戶,一直在4個窗口辦手續(xù),那4C4T(4核心4線程,下面都這么簡寫)和4C8T倒是沒什么區(qū)別。 但實際情況是銀行大廳里常年坐著100多號人,都要辦手續(xù)。 而手續(xù)往往特別的復雜,需要儲戶填寫10000000張單據(jù)的那種。 如果一直給前四個儲戶辦手續(xù),后面的就等到黃瓜菜都涼了,銀行一定會被投訴到死。 所以就這么辦:X儲戶填單據(jù)的時候,把Y儲戶叫過來辦手續(xù),X填完了這張再讓X過來繼續(xù)辦。 不過叫Y過來的時候就得暫時把跟X儲戶相關的單子和資料先收起來,等X下次過來再把Y相關的東西收好,把X的東西再拿出來。這個時候更多的窗口也就是更多的線程的優(yōu)勢就顯示出來了。 X在1號窗口填單據(jù)的時候職員A可以轉到2號窗口給Y辦手續(xù),然后再轉到1好窗口繼續(xù)給X辦手續(xù)。這樣就省下把東西收拾來收拾去的時間,這可以大幅度提高效率。 因為這樣的切換其實非常的頻繁,所以綜合來說還是差不少事的。而且是任務越多超線程相對來說效果越好。 再細致一點說呢,職員雖然同時只能處理一個單子,但他有兩只眼睛,兩只手和一張嘴還有一個腦子。 處理一個客戶的單子要先用眼睛看一下,然后腦子想一下怎么處理,然后動手動嘴。 幾乎所有單子都是這個流程,這三項都做完算是處理好一個單子。 但在職員看完第一個單子開始動腦子想的時候,其實他的眼睛是閑著的。 開始做第一個單子的時候眼睛和腦子都閑著。 不能讓丫閑著??! 于是我們要求,職員在看完第一個單子開始動腦子想的時候要開始用眼睛看這個客戶的下一個單子,而不是等第一個單子完全處理好再看第二個單子。這樣第一個單子想好了,開始動手動嘴了,就可以立刻開始想第二個單子,而同時眼睛就可以看第三個單子了。 也就是說,這個職員可以手上做著第一個單子,腦子里想著第二個單子,眼睛同時看第三個單子。某種程度上來說,雖然職員沒有分身術,但他在同一時間處理著三個單子,效率高多了吧? 這個叫流水線。級數(shù)是3級,就是把指令分成3個步驟來處理。級數(shù)越高每個核心“同時”處理的指令數(shù)就越多。但碰上特殊情況也就越蛋疼。 實際情況是對于一個儲戶來說,有的時候第一個單子不辦完下一個就沒法繼續(xù)。比如一個儲戶要先查余額再匯款,余額不知道匯款的單子根本無從處理。加上單子和單子不一樣,有的單子需要想很久,有的單子根本不用想。 所以一個職員負責一個窗口有的時候,手腦眼有的時候還是有閑下來的時候。我們稱之為流水線上的泡泡,這個時候超線程則可以更好的榨干這個職員的剩余價值(我們稱之為擠泡泡)。比如雖然他沒有分身術,但比如他在第一個窗口給X辦手續(xù),因為種種原因眼睛閑下來了,那他可以先看看第二個窗口里Y的單子嘛。