在作業系統中,進程是資源分配的基本單位,代表一個正在執行的程式;而線程則是進程內部的執行單元,常被稱為「輕量級進程」。線程由進程創建,擁有獨立的棧空間,但共享進程的堆、全局變量、文件描述符等資源。這種設計使得線程切換開銷遠小於進程,適合高併發場景。
我們可以通過 ps 指令直觀查看系統中的進程與線程結構:
$ ps x
PID TTY STAT TIME COMMAND
...
3740 ? Sl 0:02 /usr/lib/firefox/firefox # Firefox 主進程
...
$ ps xH
PID TTY STAT TIME COMMAND
...
3740 ? Sl 0:02 /usr/lib/firefox/firefox # 主進程
3740 ? Sl 0:00 /usr/lib/firefox/firefox # 線程 1
3740 ? Sl 0:00 /usr/lib/firefox/firefox # 線程 2
... (共 30+ 行 PID 均為 3740)
關鍵觀察:所有線程的 PID 與主進程完全一致,驗證了「線程共享進程資源」的特性。嚴格來說,線程在內核中無獨立 PID,此處顯示的是所屬進程的 PID。
$ ps mp 3740
PID TTY STAT TIME COMMAND
3740 ? - 0:02 /usr/lib/firefox/firefox
- - Sl 0:01 - # 線程(無獨立 PID)
- - Sl 0:00 -
...
輸出確認:線程條目無 PID 欄位,僅顯示狀態與 CPU 時間,進一步證明線程非獨立調度實體。
理解進程與線程的關係,是掌握併發編程、多線程同步機制(互斥鎖、條件變量、信號量)的基石。