必威电竞|足球世界杯竞猜平台

多線程
來源:互聯網

多線程(multithreading)是指從軟件或者硬件上實現多個線程并發執行的技術。具備多線程處理能力的計算機能夠在硬件支持下同時執行多個線程,進而提升整體處理性能。

多線程技術自1950年代起,經歷了從早期NBS SEAC和DYSEAC的雙線程系統,到Lincoln labs TX-2支持33個線程的演變。1960年代,CDC 6600和IBM ACS-360等系統通過引入多線程提升了硬件資源利用率。1970年代與1980年代,HEP、Xerox Alto、Transputer等項目進一步擴展了多線程的應用。1990年代,Tera MTA和美國華盛頓大學的SMT研究帶來了技術突破。2000年代,Cray/Tera MTA-2和英特爾 Pentium 4 HT的推出,以及超線程技術的商業化,標志著多線程技術的成熟。多線程技術通過細粒度、粗粒度和同步多線程等方式,利用時間分片機制實現單個程序內多個線程的并行運行,每個線程按照分配的時間片輪流使用CPU,實現任務的并行處理。

多線程通過后臺處理耗時任務、增強界面互動和資源利用,提升了程序效率和用戶體驗,尤其在IOS開發中效果顯著。然而,它也帶來了性能、內存、穩定性和死鎖等挑戰。

概述

線程

線程(thread)是操作系統進行運算調度的最小單位,它存在于進程之中并作為進程中的實際運作單位。一個線程代表進程中的一個單一順序控制流,允許一個進程中并發執行多個線程,每個線程可以并行執行不同的任務。在Unix System V和SunOS操作系統中,線程有時也被稱為輕量進程(lightweight processes),但這個術語更多指的是內核線程(kernel thread),而用戶線程(user thread)則通常被稱為線程。

線程出現的原因

自20世紀60年代起,進程作為操作系統中能獨立運行的基本單位,因其擁有獨立資源而在創建、撤銷、調度切換以及同步與通信等方面需要系統付出較大的時空開銷。此外,進程切換的頻率也不宜過高,這限制了其并發程度的進一步提高。到了20世紀80年代中期,為了提升系統內程序的并發執行程度和吞吐量,提出了線程概念,這是一種比進程更小的能獨立運行的基本單位。

多線程的發展

自1950年代起,早期雙線程系統如NBS SEAC(1950年)和DYSEAC(1954年)的出現標志著多線程技術的萌芽,這些系統開啟了基本的并行處理能力。到了1950年代末,Lincoln Labs TX-2等系統已能支持多達33個線程,而Bull 伽馬發動機 60和Honeywell 800也在探索多線程技術。

1960年代,CDC 6600和IBM ACS-360等系統進一步推動了多線程技術的發展,特別是IBM ACS-360通過引入第二套指令計數器和寄存器集,實現了更高效的硬件資源利用。1970年代和1980年代,HEP、Xerox Alto、HEP-2、HEP-3、Transputer和Horizon等項目不斷推動多線程技術的發展,Stellar GS-1000更是實現了四路多線程。

1990年代,Burton Smith的Tera MTA和華盛頓大學同步多線程(SMT)研究,尤其是Dean Tullsen、Susan Eggers和Henry Levy等人的工作,顯著推進了SMT技術的發展。2000年代,Cray/Tera MTA-2和英特爾 Pentium 4 HT的推出,以及Intel Tech Journal關于超線程技術的特刊發布,標志著多線程技術進入了新的階段。

多線程是為了同步完成多項任務,其最終目標是提高計算機的計算速度,從而提高其性能。

技術原理

多線程是一種并發執行機制,它允許多個線程在同一時間內并行處理。該機制的原理基于時間分片(時間 slicing),即將處理器的時間劃分為多個短的時間片。每個時間片被分配給不同的線程,使得它們能夠依次輪流執行。由于每個時間片非常短,對于任何一個應用程序而言,它都能獲得連續的處理器時間,達到一種多個應用程序同時運行的效果。

多線程就是把操作系統中的這種并發執行機制原理運用在一個程序中,把一個程序劃分為若干個子任務,多個子任務并發執行,每一個任務就是一個線程。這就是多線程程序。

技術實現

線程調度是操作系統中一個重要的功能,它負責決定哪個線程將獲得CPU時間以執行。在大多數研究領域,線程調度器需要能夠快速選擇一個已就緒的線程去運行,以提高效率,而不是逐一運行每個線程。因此,調度器能夠識別線程的優先級變得非常重要。線程調度器可以以硬件、軟件或軟硬件結合的形式實現。另一個研究領域關注的是哪些事件會導致線程切換,例如緩存失敗、內部運行續連系、使用直接內存訪問(DMA)等會造成線程切換。

在多線程方案中,如果復制了所有軟件可見的狀態,包括特許的控制登錄、轉換后備緩沖器(TLB)等,就可以讓虛擬機創建多種線程。這樣,每個線程可以在相同的處理器上運行各自的操作系統。換句話說,如果只存儲了用戶模式的狀態,就可以讓相同裸晶大小的芯片在一定時間內處理更多的線程。

技術分類

細粒度多線程

細粒度多線程(fine-grained multithreading)在每條指令執行后進行線程切換,實現多個線程間的交叉執行。這種執行模式通常采用輪轉(round-robin)方式,每個時鐘周期都會跳過那些處于阻塞狀態的線程。為了實現細粒度多線程,處理器必須能夠在每個時鐘周期進行線程切換。這種技術的主要優點在于能夠同時隱藏由短阻塞和長阻塞引起的吞吐量損失,因為當一個線程阻塞時,可以轉而執行其他線程的指令。然而,細粒度多線程的主要缺點是可能會降低單個線程的執行速度,因為即使處于就緒狀態且沒有阻塞的線程也可能因為頻繁的線程切換而延遲執行。

粗粒度多線程

粗粒度多線程(coarse-grained multithreading)是與細粒度多線程相對應的一種線程執行策略。它僅在遇到高開銷阻塞,如最后一級緩存缺失時,才進行線程切換,從而降低了對高速線程切換的需求。這種策略幾乎不影響單個線程的執行速度,因為它只在當前線程遇到高開銷阻塞時才會開始執行其他線程的指令。然而,粗粒度多線程在隱藏吞吐量損失方面的能力有限,特別是對于短阻塞,這是因為粗粒度多線程中的流水線啟動開銷較大。在粗粒度多線程處理器中,由于指令是從單一線程發射的,因此在阻塞發生時必須清空或凍結流水線。阻塞解除后,新線程必須在導致阻塞的指令完成前填充流水線。由于啟動開銷,粗粒度多線程更適合用來降低高開銷阻塞帶來的性能損失,因為在這種情況下,與阻塞時間相比,流水線重新填充時間是可以忽略的。

同步多線程

同步多線程(Simultaneous Multi-Threading,簡稱SMT)是一種硬件多線程技術,它允許一個中央處理器(CPU)在每個時鐘周期內同時執行來自多個線程的指令。這種技術在操作系統層面表現為軟件多線程。本質上,SMT技術將多CPU的線程級并行處理能力轉化為單個CPU的指令級并行處理能力。

優缺點

優點

缺點

技術應用

馮·諾依曼結構是現代計算機設計的基礎,其核心特點是順序執行指令,即在任何給定時刻,中央處理單元(CPU)只能執行一個指令。Windows 98/NT操作系統引入了一種先進的任務調度策略,該策略通過將進程細分為多個線程來實現。每個線程都能夠輪流占用CPU的運算時間。操作系統通過掛起和喚醒線程,使得多個線程能夠交替執行。由于現代CPU的高速度,這種快速的任務切換給用戶的感覺就像是多個線程在同時執行,從而模擬了多CPU并行處理的效果。

在多線程技術的一個典型應用中,例如使用File Explorer復制文件時,系統可以同時處理磁盤讀寫操作和其他任務。在這個過程中,用戶可能會看到一個動畫效果,如一張紙從一個文件夾“飄”到另一個文件夾,這個動畫實際上是由一系列視頻剪輯組成的。

典型代碼示例

參考資料 >

History of Multithreading.people.computing.clemson.edu.2024-11-21

多線程:為處理器提供更高的性能.www.ionos.de/digitalguide.2024-11-21

多線程示例的樣本代碼.IBM.2024-11-20

生活家百科家居網