1. 程式人生 > >什麼?一個核同時執行兩個執行緒?

什麼?一個核同時執行兩個執行緒?

## CPU裡的時間 Hi,好久不見,我是CPU一號車間的阿Q,不認識我的話,可以看看:[完了!CPU一味求快出事兒了!](https://mp.weixin.qq.com/s/NVIgNj4c7ixkJWsemOt--g) 真的是好久不見了,人類有個說法叫天上一天,地上一年,而在我們的世界裡,人類一天,我們不知要過多少年~~ ![圖源網路,侵刪](https://imgkr.cn-bj.ufileos.com/0c85ffc7-bcd5-40c8-bcfa-ce4d29569314.png) 在我所在的CPU這座工廠裡,時間的概念有些不太一樣。工廠大門外的中央廣場上掛著一個大大的鐘表,整個計算機世界裡的居民能夠掐著時間過日子全都仰仗它,你們人類把它叫做**晶振**。 這個鐘錶每隔66000000分之一秒就會報一次時,比人類的鐘表不知道快到哪裡去了。 早些年還是夠用的,不過隨著我們CPU工廠生產效率的不斷提升,我們多次向晶振提出提升報時的精度,想讓他報時報的的更快一些,不過都被拒絕了。給我們的理由是記憶體那傢伙聯合主機板上其他單位帶頭反對,說他們受條件限制,沒辦法像我們這麼快。 ![圖源網路,侵刪](https://imgkr.cn-bj.ufileos.com/7d75e69a-4e22-4584-b889-fd57ca0e4aab.png) 靠人不如靠己,為此,咱們工廠專門設立了一個叫`倍頻器`的部門進一步把這個報時細分,達到了3600000000分之1秒,作為我們工廠內部工作作息的`時鐘週期`,這數字實在是太長了,人類為了好記,取了一個叫`主頻`的名字,表示1秒鐘報時的次數,就是3.6GHz。 一不小心扯遠了,這次想給大家說一件事兒······ ## 指令依賴 我們這座工廠的任務就是不斷的執行人類編寫的程式指令,咱廠裡有8個車間,大家開足了馬力,就能同時執行8個執行緒,那速度那叫一個快。 可是廠裡的老闆還是嫌我們不夠快,那天居然告訴我們要每個車間執行兩個執行緒,實現`八核十六執行緒`,是要把我們的勞動力壓榨到極致!我們都滿肚子怨言······ 事情的起因是這樣的~~ 有一次,我們一號車間的四人組趁著工作的空當,又鬥起了地主,突然領導過來視察。 ![圖源網路,侵刪](https://imgkr.cn-bj.ufileos.com/2bf66156-06ea-427b-be48-9d12016a8fb8.png) “你們怎麼又在玩?是工作量不飽和嗎?”,見我們幾個閒著,領導一下就不高興了。 我趕緊上前解釋到:“不好意思領導,咱們剛剛執行了一條指令,需要記憶體中的一塊資料,剛好又不在快取中,所以找記憶體那傢伙要資料去了,這不您也知道那傢伙向來很慢,我們閒著也是閒著所以就稍微放鬆了一下······” 聽了我的話領導一下皺起了眉頭,“還給我狡辯,廠裡現在不是用上了`亂序執行`技術嗎?有這閒功夫你們可以先執行後面的指令啊” ![](https://imgkr.cn-bj.ufileos.com/b2d0d395-f189-4c28-83be-1f490b357a56.png) “這我們當然知道,這不您看,我們把後面那幾條指令也都處理了,現在遇到了一條沒法提前執行的指令才停下來的” 領導看了一下問到:“為啥那條不能提前執行?” “那是一個加法指令,加數依賴於現在正在處理的指令的運算結果呢,所以記憶體那傢伙不來訊息,我們只能擱置著了”,我繼續解釋到。 領導聽完,一臉不高興的離開了。 ## 資源閒置 過了幾天,領導又來到咱們一號車間來了,也不知道怎麼回事,這明明有八個車間,領導怎麼老愛往我們這邊跑。 不過這一次,我們沒有鬥地主,正在辛辛苦苦的工作著。 當時,我正在執行一個浮點數運算,領導過來一看,拍了拍我的肩膀說到:“喲,阿Q,忙著吶,這是在做什麼啊?” 我笑著說到:“領導好,我剛剛用浮點數運算電路單元做了一個浮點數乘法,正在等待計算結果呢” ![圖源網路,侵刪](https://imgkr.cn-bj.ufileos.com/9a4a6b9e-9d38-48d6-95e6-0001ba8b7301.png) 領導點了點頭,往周邊巡視一圈,指著一堆裝置問到:“這一堆是什麼?” “哦,那是整數運算電路單元,這條指令用不到它” 領導再次點了點頭,若有所思的離開了。 ## 超執行緒技術 又過了幾天,廠裡召開了一次會議,八個車間都派了代表參會。 ![圖源網路,侵刪](https://imgkr.cn-bj.ufileos.com/03487003-a38d-425a-bc7e-22b384010c2e.png) 會上,領導發話了:“前段時間我到各個車間視察,發現現在咱們廠裡資源浪費的情況很嚴重!” 二號車間的虎子一聽就坐不住了,“領導,咱們大傢伙工作都挺賣力的,哪裡有浪費啊?” 領導瞥了一眼,繼續說到:“一方面,廠裡的計算資源——電路裝置得不到充分利用,另一方面,又因為記憶體讀取緩慢、指令依賴等方面的原因,浪費大家太多時間花在等待上” 八號車間的代表向來愛拍馬屁,接著領導的話問到:“領導是有什麼指示?我們八號車間絕對支援!” “我們幾個管理層經過討論,決定讓你們*一個車間由現在執行一個執行緒,變成執行兩個執行緒!*” ![圖源網路,侵刪](https://imgkr.cn-bj.ufileos.com/8878d27d-aff1-4a5c-8d41-f854c2d31874.png) 領導這話一出,會場竊竊私語此起彼伏。虎子偏頭小聲對我說到:“這資本家改不了剝削的本色,這壓榨的也太狠了!” 領導咳嗽了幾聲,會場再次安靜了下來。 我起身問到:“領導,這咱們一個車間怎麼能執行兩個執行緒呢,每個車間的`暫存器`只有一套,這用起來豈不是要亂掉?” “這個你不用擔心,我們會給每個車間配兩套暫存器!” ![](https://imgkr.cn-bj.ufileos.com/0e9fb48b-5cc0-4bbb-a8c0-df300262f4b6.png) 五號車間的代表一聽說到:“要不再給我們添點人手吧,這樣效率肯定提升快!” 領導一聽笑著說到:“還添人手?要不要再給你們添點運算裝置?那我不如再增加幾個車間,還開這會幹嘛?這次會議的主題就是如何讓我們現有的資源得到最大程度的利用,減少浪費現象!” 會場一度陷入了尷尬又緊張的氛圍。 還是虎子打破了安靜,“領導,這兩個執行緒的工作該怎麼開展,我們心底沒有數啊!” 領導滿意的笑了一下:“這才是你們該問的問題嘛!每個車間回去重新分配一下工作,劃分為兩套班子,各自維護一套暫存器,對外宣稱你們是兩個不同的`物理核心`,但各車間的快取和計算資源還是隻有一套。你們內部協調好,在執行程式碼指令的時候,充分利用等待的時間執行另一個執行緒的指令,這樣也不用擔心指令依賴的問題。” 大家一邊聽一邊做著筆記。 ![圖源網路,侵刪](https://imgkr.cn-bj.ufileos.com/aa57da5f-1ec1-4f22-aa49-a31faa2d8f6c.png) “還有,如果遇到資源閒置的情況,也可以同時執行兩個執行緒的指令。比如一個執行緒是執行整數運算指令,一個執行緒是執行浮點數運算指令,就可以一起來,讓工廠的計算資源充分用起來,別閒置。” 看我們都認真的記著筆記,領導露出了滿意的笑容,“都記好了吧,我們給這項革命性的技術取了個特別酷的名字,叫**超執行緒技術**!” 散會後,大家都紛紛抱怨,把大家逼得這麼緊,以後上班看來是沒法摸魚了,這日子真是越來越難過了。 ## 譭譽參半的超執行緒 不過,抱怨歸抱怨,大家還是得按照新規來執行。 很快,廠裡就落地了這項技術,咱們一個車間搖身一變,變成了倆,咱們原來八核八執行緒的CPU一下變成了八核十六執行緒。作業系統那幫人都被我們給騙了,還以為咱們是十六核的CPU呢! ![圖源網路,侵刪](https://imgkr.cn-bj.ufileos.com/10f83a46-347e-4fdf-950b-544af521cf0e.png) 不過畢竟計算資源還是隻有一份,遇到兩個執行緒都要使用同樣的計算單元時,還是得要排隊,還要花時間在兩個執行緒之前的協調工作上,所以整體工作效率的根本沒有2倍,絕大多數時候能提升個20%-30%就不錯了。 不僅如此,車間改造後,增加了新的邏輯電路單元,咱這CPU工廠的功耗也更大了,工廠門口那座巨大的風扇也得加大馬力給我們降溫了。 廠子裡對這項技術的反對聲音開始不絕於耳。 ![圖源網路,侵刪](https://imgkr.cn-bj.ufileos.com/236bb13b-cdda-48da-a768-f474b82f497d.png) 不過後來發生了一件事,讓人們不得不關閉這項技術。聽聞這個訊息,我們都樂開了花,看來又可以繼續摸魚了······ ## 彩蛋 > 每當有網路資料包到來,網絡卡那傢伙就通過中斷告訴我們CPU去處理。 > > 可咱明明有8個車間,它非得一個勁的只給我們車間發中斷,搞得我們都沒法好好工作。 > > 終於,我忍不住了······ > > *預知後事如何,請關注後續精彩······* --- > **說明**: > > 超執行緒技術出現時間其實早於多核技術。本故事僅為敘述方便,不代表二者真實的發展順序。 > ## 往期TOP5文章 [真慘!連各大程式語言都擺起地攤了!](https://mp.weixin.qq.com/s/_nTIFPwbqieIvrbpXkB5CQ) [因為一個跨域請求,我差點丟了飯碗](https://mp.weixin.qq.com/s/K15IVpe57STOf0SxyLEg9A) [完了!CPU一味求快出事兒了!](https://mp.weixin.qq.com/s/NVIgNj4c7ixkJWsemOt--g) [雜湊表哪家強?幾大程式語言吵起來了!](https://mp.weixin.qq.com/s/erSqe-nItuQPxW4MT3LEVg) [一個HTTP資料包的奇幻之旅](https://mp.weixin.qq.com/s/axPUi-8kHtFQTwgRtyZtGQ) ![](https://imgkr.cn-bj.ufileos.com/4b6d4bd9-3924-4288-a3e9-a31ea0dd0