處理程序(Process)和執行緒(Thread)是作業系統的核心概念,也是理解並行程式設計的起點。用一個生活比喻來拆解兩者的差異,往往比讀定義清楚得多。
處理程序 vs 執行緒:一個家庭的故事
想像有一個家庭經營著一間小餐廳。在這個比喻中:
- 整個餐廳就像一個處理程序
- 家庭成員則是執行緒
處理程序(餐廳)
- 擁有自己的資源:廚房設備、座位區、食材等
- 有獨立的記憶體空間:存放菜單、庫存清單等資訊
- 啟動和關閉成本較高:開店和打烊需要較多時間和精力
執行緒(家庭成員)
- 共享餐廳的資源
- 可以快速切換任務:爸爸可以從煮菜轉去招呼客人
- 建立和銷毀成本較低:家庭成員可以快速加入工作或休息
多執行緒:實際跑起來是什麼樣子
這個家庭實際跑起來的樣子:
並行處理:
- 媽媽在廚房煮菜
- 爸爸在前台招呼客人
- 哥哥負責送餐
- 妹妹處理結帳
資源共享:
所有人共用廚房的爐子、冰箱,不需要每個人準備一套。動態調度:
前台突然湧入大批客人時,爸爸可以直接喊哥哥過來幫忙——對應執行緒在同一份共享記憶體上協作,切換成本遠低於重新開一間分店(另起一個處理程序)。
多執行緒的優缺點
優點
- 提高系統吞吐量
- 改善反應時間
- 充分發揮多核 CPU 的運算能力
缺點
- 可能產生資源競爭:例如兩個執行緒同時要寫入同一份資料
- 增加程式複雜度:需要協調不同執行緒的執行順序
- 可能導致死鎖:兩個執行緒互相等待對方釋放資源,結果誰都動不了
小結
處理程序是資源的邊界,執行緒是執行的單位——這句話記住了,兩者的差異大概就清楚一半了。下次遇到 race condition 或死鎖問題,回頭對照餐廳的比喻,往往比直接讀 OS 教科書更快釐清問題在哪。
本部落格所有文章除特別聲明外,均採用CC BY-NC-SA 4.0 授權協議。轉載請註明來源 kyosora 筆記!
評論




