我正在研究執行緒和多執行緒概念,我遇到了不同型別的執行緒:
- 用戶執行緒:在內核之上支持,在沒有內核的情況下進行管理。
- 內核執行緒:由作業系統直接支持和管理。
- 軟體執行緒:由作業系統管理的執行執行緒。
- 硬體執行緒:某些處理器的一項功能,允許在某些情況下更好地利用處理器。
誰能澄清這些型別的執行緒之間的區別(我很困惑)?
謝謝
uj5u.com熱心網友回復:
“硬體執行緒”是個壞名字。CPU 設計者選擇它作為藝術術語,并沒有過多考慮軟體開發人員認為“執行緒”的含義。
當作業系統中斷一個正在運行的執行緒以便允許其他執行緒使用 CPU 時,它必須保存足夠多的 CPU 狀態,以便稍后可以再次恢復該執行緒。大多數情況下,保存的狀態由程式計數器、堆疊指標和其他 CPU 暫存器組成,這些暫存器是程式員的CPU 模型的一部分。
所謂的“超執行緒 CPU ”具有兩套或更多套完整的這些暫存器。這允許它代表兩個或多個程式執行緒執行指令,而無需作業系統進行干預。
該領域的專家喜歡漂亮、簡短的事物名稱。他們沒有談論“完整的背景關系暫存器集”,而是稱它們為“硬體執行緒”。
uj5u.com熱心網友回復:
硬體執行緒允許您實際并行運行事物(這與并發不同)。這些對應于您的 CPU 內核數量(具有細微差別,例如超執行緒,它可以使內核數量增加一倍)。
最重要的是作業系統(內核)執行緒。它是您的作業系統提供的抽象。作業系統會將它們映射到硬體執行緒。它通過內部調度程式來實作這一點,我們對此幾乎沒有控制權。請注意,理論上可能存在任意數量的 OS 執行緒(如果沒有足夠的內核來處理它們,它們只會等待 CPU),盡管所謂的背景關系切換的價格將其限制在幾千甚至更多。
用戶執行緒(又名綠色執行緒、協程等,它們有很多名稱)是您的軟體(例如編程語言及其運行時)提供的抽象。它們在作業系統執行緒之上運行,并通過內部(但在用戶空間)調度程式映射到它們。它們往往比 OS 執行緒執行得更好(尤其是與 i/o 系結的任務),因為它們具有較低的背景關系切換開銷,而且它們可以利用異步 api(例如非阻塞套接字)而不產生 OS 執行緒(這也很昂貴)。由于它們是輕量級的,因此您可以生成大量它們。有些人聲稱一次運行數百萬個這樣的執行緒。我見過成千上萬的人沒有問題。
不過,我從未見過“軟體執行緒”一詞。但根據背景關系,它意味著用戶或內核執行緒。不太可能它意味著其他任何東西。
順便說一句,沒有一些作業系統支持,沒有真正的代碼可以運行。它可能會受到限制,例如,如果您不希望事情并行運行。但是,只要您想要真正的并行性,就無法擺脫作業系統執行緒。用戶執行緒的內部調度程式必須生成作業系統執行緒并以某種方式將用戶執行緒映射到它們。盡管通常它是一個不可見的實作細節。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/417326.html
標籤:
上一篇:UI和作業執行緒之間的執行緒同步
下一篇:Tokio頻道發送,但不接收
