計算機多線程的定義:
多線程(Multithreading)是指在同一進程內并發執行多個線程的技術。每個線程代表一個執行流,可以獨立執行代碼。
在多線程程序中,操作系統會將多個線程的執行時間片交替分配給不同線程,從而使它們看起來幾乎同時運行。
多線程的原理涉及操作系統如何調度和管理多個線程的執行、線程之間如何共享資源等方面。

多線程的基礎
-
線程與進程的關系:
- 進程是操作系統資源分配的基本單位,一個進程內可以包含多個線程。
- 線程是進程的一個執行單元,線程之間共享進程的資源,如內存、文件描述符等。
每個進程至少有一個線程,通常稱為主線程,其他線程則是子線程。多線程在同一進程內共享數據和資源,因此它們的創建和銷毀成本較低。
-
線程的獨立性與共享資源:
- 獨立性:每個線程有自己的棧(用于存儲局部變量、函數調用等),并且在調度時可以獨立運行。
- 共享資源:多個線程共享同一個進程的地址空間(包括代碼段、全局變量、堆等),這使得線程間可以輕松共享數據。但也因此需要謹慎地管理并發訪問,以防止數據競爭(data race)和不一致性。
-
線程調度:
多線程是通過操作系統的調度機制,使得多個線程在同一進程中并發執行。它可以提高CPU的利用率,并提升程序的效率,尤其在需要處理I/O密集型或計算密集型任務時非常有效。操作系統中的線程調度程序負責決定哪些線程運行、何時運行以及運行多長時間。不同的操作系統有不同的線程調度策略,通常會使用 時間片輪轉(Round-robin)、優先級調度(Priority scheduling) 或 多級隊列(Multilevel Queue) 等算法來管理線程的執行順序。
線程的調度由操作系統內核管理:
- 搶占式調度:操作系統內核根據設定的時間片或者優先級來控制線程的運行,強制中斷當前線程,切換到其他線程。這是現代操作系統(如Linux、Windows)的常見調度方式。
- 協作式調度:線程自己決定何時讓出CPU時間片,不會被強制中斷。這種方式要求線程在合適的時機主動讓出CPU時間(例如,在I/O操作時)。
-
上下文切換:
在多線程環境中,操作系統需要在不同線程之間切換執行,這個過程稱為 上下文切換(Context Switch)。上下文切換涉及保存當前線程的狀態(如寄存器值、程序計數器等)并加載下一個線程的狀態。上下文切換是多線程的核心機制之一,它讓操作系統能夠在多個線程之間快速切換。上下文切換的代價通常較高,因為涉及到保存和恢復線程狀態、更新調度器的數據結構等操作。因此,頻繁的上下文切換會影響系統性能。
-
線程同步與互斥:
多線程通過同步機制和互斥機制來避免資源沖突和數據競爭。由于多個線程共享同一個進程的內存空間,線程間可能會并發訪問共享資源。如果沒有適當的同步機制,多個線程可能會同時修改同一共享變量,從而導致數據不一致或競爭條件(race condition)。
為了避免這種情況,常用的同步機制有:
- 互斥鎖(Mutex):保護共享資源的訪問,確保在任何時刻只有一個線程可以訪問某個資源。
- 讀寫鎖(Read/Write Lock):允許多個線程并行讀取共享資源,但在有線程寫入資源時,其他線程不能讀寫。
- 信號量(Semaphore):控制對某個資源的訪問,允許多個線程同時訪問有限數量的資源。
- 條件變量(Condition Variable):用于線程間的協調,允許線程在特定條件滿足時繼續執行。
-
線程的創建與銷毀:
- 創建:線程通常由主線程創建,并由操作系統負責分配資源(如棧空間)。線程的創建可以通過系統調用或者在高級編程語言中使用線程庫(如Java的
Thread類或Python的threading模塊)來實現。 - 銷毀:當線程執行完畢,操作系統回收該線程的資源。線程也可以在運行過程中主動結束。
- 詳細請看下文的線程生命周期圖。
- 創建:線程通常由主線程創建,并由操作系統負責分配資源(如棧空間)。線程的創建可以通過系統調用或者在高級編程語言中使用線程庫(如Java的
-
線程的并發與并行:
- 并發(Concurrency)指的是多個線程在同一時間段內交替執行,可能并不在同一時刻同時運行。現代操作系統通過時間片輪轉讓多個線程在一個核心CPU上“看似”同時運行。
- 并行(Parallelism)指的是多個線程在物理上同時執行,通常需要多個CPU核心同時工作,通常需要支持多核處理器的硬件。
注:在單核處理器上,操作系統通過時間片輪轉實現并發,而在多核處理器上,操作系統可以通過將線程分配到不同的CPU核心上實現并行。
線程的生命周期

浙公網安備 33010602011771號