超執行緒和多執行緒的區別

2021-10-09 19:30:57 字數 4551 閱讀 2033

關於執行緒,多執行緒,併發,並行等作業系統的基礎知識,可以回顧我之前的部落格

作業系統學習之一常用術語

物理cpu:

物理cpu就是插在主機上的真實的cpu硬體,在linux下可以數不同的physical id 來確認主機的物理cpu個數。 

核心數:

我們常常會聽說多核處理器,其中的核指的就是核心數。在linux下可以通過cores來確認主機的物理cpu的核心數。

邏輯cpu:

邏輯cpu跟超執行緒技術有聯絡,假如物理cpu不支援超執行緒的,那麼邏輯cpu的數量等於核心數的數量;

如果物理cpu支援超執行緒,那麼邏輯cpu的數目是核心數數目的兩倍。在linux下可以通過 processors 的數目來確認邏輯cpu的數量。

超執行緒:

超執行緒是英特爾開發出來的一項技術,使得單個處理器可以象兩個邏輯處理器那樣執行,這樣單個處理器以並行執行執行緒。

這裡的單個處理器也可以理解為cpu的乙個核心;這樣便可以理解為什麼開啟了超執行緒技術後,邏輯cpu的數目是核心數的兩倍了。

超執行緒技術實現並行操作的原理?

乙個執行緒在執行時會占用cpu資源,其他執行緒想要得到執行就必須等待該執行緒將cpu資源讓出。

利用超執行緒技術,模擬出的兩個邏輯核心共享同乙個cpu資源,所以同一時刻可以有兩個執行緒都占用cpu資源,因此這兩個執行緒都可以得到執行,這就是實現同一時間執行兩個執行緒的並行操作。

比如說:

之前在筆記本上做的筆記(當時應該是看的論壇上的生動形象的例子),所以也放在這吧。 ps:算是多種記憶方式吧

1)processing unit(運算處理單元),簡稱pu

2)architectual state(架構狀態單元),簡稱as

pu一般就是執行運算,比如算數運算加減乘除。as執行一些邏輯和排程方面的操作,比如控制記憶體訪問等。

單核cpu(先從簡單的談起)

一般一塊傳統意義的cpu上會有乙個pu、乙個as。

比喻 :乙個小飯館(單核cpu),夫妻老婆店,老闆兼大廚廚房炒菜,老闆娘兼服務員點單。這不,來了乙個客人,首先,走到老闆娘的收銀台前,看選單準備點單。差不多5分鐘後,客人點完了乙份蓋澆飯。老闆娘抄好了單,遞給了在後廚的老公。老公開始炒菜。在這個例子中,老闆娘可以理解成as,老闆/大廚可以理解稱pu(幹實事的)。

多核cpu

這裡說的多核,是多個物理核,比如i3的雙核,i5的4核。這中架構下,每乙個物理核都有乙個pu和乙個as。所以。對於i3來說,就有總共兩個pu,兩個as。對於i5來說,就有總過4個pu,4個as。

比喻:上面小飯館的列子,對於5、6個客人可能還能忙的過來。但設想一下子來他個16個客人,這隊估計要排到街上了。如果再告訴你,每10分種就有16個新客人過來點單。。。完了。生意估計是做不下去了 - 老闆、老闆娘忙到死。

這時,我們就需要乙個更大的單位食堂(多核cpu)。有4個服務生、4個大廚。4個服務生同時點單,4個大廚同時開炒(1號服務生專給一號大廚下單,二號服務神生專給二號大廚下單。。。以此類推)。這樣相比小飯館乙個老闆娘、乙個客人佇列,這裡成了4個佇列,效率頓時比小飯館提高4倍。16個客人,平均分配成4個佇列,每個佇列就只有4個客人了,情況是不是好了很多?

超執行緒技術(ht)

超執行緒(ht)並不是我們一般說的多執行緒。我們一般說的多執行緒(multi-threading)是指程式方面的,簡單的說就是『軟』的,**級別的。而超執行緒一般指的是硬體架構方面的,是『硬』的:通過調整as而模擬出來的『邏輯核』。

簡單的說吧,超執行緒就是乙個物理核裡面,有兩個as,乙個pu。兩個as共享乙個pu。為什麼這麼做,看下面的例子:

比喻:剛剛那個單位食堂,4個服務生,4個大廚,4個佇列。會不會效率問題?

有!設想每個客人都有看單選單的時候,你能保證每個客人都看兩眼就下單?有的客人難免會磨磨蹭蹭,問東問西,乙個菜點它箇15分鐘。而設想大廚平均炒乙個菜只要10分種。那剩下的那5分鐘呢?大廚在廚房閒著沒事幹,喝茶看報紙。時間全被客人-服務生點菜這個環節給浪費掉了。

那有沒有解決方法?

--- 增加服務生!

這時候,我們給每個大廚多增加乙個服務生,從乙個服務生變成了兩個服務生(as),服務生1a和服務生1b開兩個佇列,同時給乙個大廚(pu)下單。這樣,當出現服務生1a的客人15分鐘單子都沒有下完的情況下,1b的客人單子很有可能3分鐘下好送給大廚開炒了(pu),這樣大廚就不會站在廚房傻等1a客人的訂單。這樣,最大限度地榨幹大廚的勞動力 (大廚估計要罵娘了),而對於cpu來說,最大限度的提高了cpu的使用率,減少了cpu的(idle)空閒時間。

關於執行緒,多執行緒,併發,並行等作業系統的基礎知識,可以回顧我之前的部落格

作業系統學習之一常用術語

物理cpu:

物理cpu就是插在主機上的真實的cpu硬體,在linux下可以數不同的physical id 來確認主機的物理cpu個數。 

核心數:

我們常常會聽說多核處理器,其中的核指的就是核心數。在linux下可以通過cores來確認主機的物理cpu的核心數。

邏輯cpu:

邏輯cpu跟超執行緒技術有聯絡,假如物理cpu不支援超執行緒的,那麼邏輯cpu的數量等於核心數的數量;

如果物理cpu支援超執行緒,那麼邏輯cpu的數目是核心數數目的兩倍。在linux下可以通過 processors 的數目來確認邏輯cpu的數量。

超執行緒:

超執行緒是英特爾開發出來的一項技術,使得單個處理器可以象兩個邏輯處理器那樣執行,這樣單個處理器以並行執行執行緒。

這裡的單個處理器也可以理解為cpu的乙個核心;這樣便可以理解為什麼開啟了超執行緒技術後,邏輯cpu的數目是核心數的兩倍了。

超執行緒技術實現並行操作的原理?

乙個執行緒在執行時會占用cpu資源,其他執行緒想要得到執行就必須等待該執行緒將cpu資源讓出。

利用超執行緒技術,模擬出的兩個邏輯核心共享同乙個cpu資源,所以同一時刻可以有兩個執行緒都占用cpu資源,因此這兩個執行緒都可以得到執行,這就是實現同一時間執行兩個執行緒的並行操作。

比如說:

之前在筆記本上做的筆記(當時應該是看的論壇上的生動形象的例子),所以也放在這吧。 ps:算是多種記憶方式吧

1)processing unit(運算處理單元),簡稱pu

2)architectual state(架構狀態單元),簡稱as

pu一般就是執行運算,比如算數運算加減乘除。as執行一些邏輯和排程方面的操作,比如控制記憶體訪問等。

單核cpu(先從簡單的談起)

一般一塊傳統意義的cpu上會有乙個pu、乙個as。

比喻 :乙個小飯館(單核cpu),夫妻老婆店,老闆兼大廚廚房炒菜,老闆娘兼服務員點單。這不,來了乙個客人,首先,走到老闆娘的收銀台前,看選單準備點單。差不多5分鐘後,客人點完了乙份蓋澆飯。老闆娘抄好了單,遞給了在後廚的老公。老公開始炒菜。在這個例子中,老闆娘可以理解成as,老闆/大廚可以理解稱pu(幹實事的)。

多核cpu

這裡說的多核,是多個物理核,比如i3的雙核,i5的4核。這中架構下,每乙個物理核都有乙個pu和乙個as。所以。對於i3來說,就有總共兩個pu,兩個as。對於i5來說,就有總過4個pu,4個as。

比喻:上面小飯館的列子,對於5、6個客人可能還能忙的過來。但設想一下子來他個16個客人,這隊估計要排到街上了。如果再告訴你,每10分種就有16個新客人過來點單。。。完了。生意估計是做不下去了 - 老闆、老闆娘忙到死。

這時,我們就需要乙個更大的單位食堂(多核cpu)。有4個服務生、4個大廚。4個服務生同時點單,4個大廚同時開炒(1號服務生專給一號大廚下單,二號服務神生專給二號大廚下單。。。以此類推)。這樣相比小飯館乙個老闆娘、乙個客人佇列,這裡成了4個佇列,效率頓時比小飯館提高4倍。16個客人,平均分配成4個佇列,每個佇列就只有4個客人了,情況是不是好了很多?

超執行緒技術(ht)

超執行緒(ht)並不是我們一般說的多執行緒。我們一般說的多執行緒(multi-threading)是指程式方面的,簡單的說就是『軟』的,**級別的。而超執行緒一般指的是硬體架構方面的,是『硬』的:通過調整as而模擬出來的『邏輯核』。

簡單的說吧,超執行緒就是乙個物理核裡面,有兩個as,乙個pu。兩個as共享乙個pu。為什麼這麼做,看下面的例子:

比喻:剛剛那個單位食堂,4個服務生,4個大廚,4個佇列。會不會效率問題?

有!設想每個客人都有看單選單的時候,你能保證每個客人都看兩眼就下單?有的客人難免會磨磨蹭蹭,問東問西,乙個菜點它箇15分鐘。而設想大廚平均炒乙個菜只要10分種。那剩下的那5分鐘呢?大廚在廚房閒著沒事幹,喝茶看報紙。時間全被客人-服務生點菜這個環節給浪費掉了。

那有沒有解決方法?

--- 增加服務生!

這時候,我們給每個大廚多增加乙個服務生,從乙個服務生變成了兩個服務生(as),服務生1a和服務生1b開兩個佇列,同時給乙個大廚(pu)下單。這樣,當出現服務生1a的客人15分鐘單子都沒有下完的情況下,1b的客人單子很有可能3分鐘下好送給大廚開炒了(pu),這樣大廚就不會站在廚房傻等1a客人的訂單。這樣,最大限度地榨幹大廚的勞動力 (大廚估計要罵娘了),而對於cpu來說,最大限度的提高了cpu的使用率,減少了cpu的(idle)空閒時間。

超執行緒基礎

在我們的os裡,程序是資源分配的最小單位 執行緒是cpu排程的最小單位 1 繼承thread 建立 a extends thread 在a中實現run 啟動 利用繼承自thread 的strart 方法 a a new a a.start 2 實現runnable介面 建立 a implements...

Linux 超執行緒

超執行緒技術就是利用特殊的硬體指令,把兩個邏輯核心模擬成兩個物理晶元,讓單個處理器都能使用執行緒級平行計算,進而相容多執行緒作業系統和軟體,減少了cpu的閒置時間,提高的cpu的執行效率。以前的單核心處理器,在同一時間內只可以處理一項工作 執行緒 thread 如果同時要處理一項以上的任務是不可能,...

CPU超執行緒技術

超執行緒簡單來說就是可以提供核心利用率的東西,將閒置的核心充分利用起來並進行合理的分配。增加核心的並行運算效能。在作業系統中,一顆物理cpu可以當作多個cpu使用,類似於軟體共享一樣。舉個例子,我們以下面四核四執行緒cpu為例,為大家講解cpu的超執行緒,下圖乙個cpu提供了四個核心,每乙個核心又提...