程序與執行緒

記錄一下什麼是程序(Process)與執行緒(Thread)。

程序

程序(Process)是作業系統中正在執行的一個程式的實例,也是系統進行資源分配的獨立單位。每個程序在啟動時,作業系統會分配給它專屬的獨立記憶體空間,因此不同程序之間是互相隔離的,彼此間不會共享記憶體資源。

例子:程序就像是一座「獨立的工廠」。 每座工廠都有專屬的廠房與資源(記憶體空間)。不同工廠之間的運作是各自獨立的,A 工廠發生意外停機(崩潰)並不會影響到 B 工廠。如果兩座工廠需要合作交換物資,必須透過特定的外部運輸聯絡機制(這在作業系統中稱為「行程間通訊 IPC」)。

執行緒

執行緒(Thread)是程序內部的執行單元,也是 CPU 調度與執行的基本單位。一個程序一定會有一個以上的執行緒,這些執行緒會「共享」該程序的資源(例如記憶體與各種檔案),但每條執行緒仍有自己獨立的執行堆疊(Stack)。因為不需切換記憶體分配空間,執行緒之間的建立與切換速度比程序快得多。

例子:執行緒就像是工廠裡的「生產線員工」。 同一座工廠(程序)裡可以有很多位員工(執行緒)同時工作。他們共用這座工廠的空間與工具(共享記憶體)。這讓員工之間溝通、傳遞物品非常快速;但壞處是,如果某個員工操作嚴重失誤引發了公安意外(例如記憶體區段錯誤),可能會導致整座工廠跟著停工(整個程序崩潰)。

綠色執行緒

綠色執行緒(Green Thread,在某些情境下與虛擬執行緒、協程概念相似)不是由底層作業系統核心(OS Kernel)直接建立與管理,而是由程式語言的執行階段(Runtime)或虛擬機在使用者空間中自行調度。它的建立與切換不需切換至作業系統核心態,因此資源開銷極低,可以輕易建立數以萬計的綠色執行緒來處理高併發應用(例如 Go 語言的 Goroutine 或是 Java 21 的 Virtual Thread)。

例子:綠色執行緒就像是工廠員工自己管理的「待辦任務清單」。 一位員工(作業系統的執行緒)不需要每次切換手邊的工作都跑去向廠長(作業系統)報備核准;他可以自己根據狀況,在多個小任務(綠色執行緒)之間快速且靈活地切換。這樣一來,單一員工(OS Thread)就能極度高效地處理海量的零散任務,大幅省去繁瑣的行政通報流程與開銷。


This site uses Just the Docs, a documentation theme for Jekyll.