執行緒概念淺談

辰多代码發表於2024-05-28

1. 為什麼要有執行緒

我們知道一個整合應用場景需要多個程序同時排程執行各自的功能,那麼多程序的本質就是產生多個執行流,每個執行流執行不同的程式碼和功能,但是一個程序由PCB(task_struct)、程序地址空間、頁表、檔案描述符表等資源組成,是一個資源集合,建立的開銷較大,那麼為了滿足使用者的多執行流的需求的同時又降低開銷,執行緒就因此誕生,一個程序可以有多個執行緒,同一個程序的執行緒共享同一份資源(程序地址空間、頁表等)。

2. 執行緒是什麼

在一個程式裡的一個執行路線就叫做執行緒(thread)。更準確的定義是:執行緒是“一個程序內部的控制序列”。
認識執行緒,我們需要重新定義程序,我們對程序的粗淺認知是程序 = PCB + 程序資源,但是我們一般認為一個程序只有一個PCB,是因為我們的程式一般都是單執行緒執行流,而多執行緒執行流就是有多個PCB指向同一份資源(程序地址空間、頁表等)。

2.1 執行緒的理解

執行緒是CPU排程的基本單位,如果一個程序有多個執行緒,那麼OS肯定要對其進行管理、執行、終止等操作,如何管理——先描述,再組織。
Linux的設計者認為,程序和執行緒都是執行流,具有極度的相似性,沒必要單獨設計資料結構,因為一旦設計新的資料結構,就必然要設計配套的介面,程式設計難度增大,程式碼的維護也會更難,因此設計者想出直接採用PCB描述執行緒,複用以前描述程序的程式碼,來模擬執行緒,因此每一個PCB就對應一個執行緒,我們以前認識的程序就是特殊的一種形式——單執行緒程序(只有一個PCB)。

2.2 執行緒和程序之間的關係

將記憶體資源形象的表示為國家,程序表示一個個家庭,而執行緒就比作一個家庭中的一個個成員,每個成員都在併發地執行各自的工作,共享同一份家庭資源(房子、汽車等等),都是在為這個家庭生活所努力。

相關文章