TL;DR | 面試情境模擬 #
👴 面試官:請解釋一下 Process 與 Thread 的差別?
🧑💻 你:簡單來說,Process 是資源分配的單位,而 Thread 是 CPU 執行任務的最小單位。 一個 Process 可以包含多個 Thread,它們共用 Process 的記憶體;Thread 切換速度比 Process 快,但穩定性較低。
為什麼要分開?(圖解與餐廳比喻) #
把程式比喻成一家餐廳,你就懂了:
1. 結構圖解 #
[ Process A (餐廳) ]
+------------------------------------------+
| [Thread 1] [Thread 2] [Thread 3] |
| (員工們共用同一個廚房/記憶體) |
+------------------------------------------+
[ Process B (餐廳) ]
+------------------------------------------+
| [Thread 1] |
| (獨立廚房,跟 Process A 完全隔離) |
+------------------------------------------+
- Process (餐廳):是獨立的實體,有自己專屬的用餐區、廚房(記憶體資源)。A 餐廳與 B 餐廳完全隔開,互不影響。
- Thread (廚師):是餐廳裡的員工,共用同一個廚房(記憶體),協作速度快。但如果一個廚師把廚房燒了,整間餐廳(Process)都完了。
核心差異總結 #
| 特性 | Process (處理程序) | Thread (執行緒) |
|---|---|---|
| 定義 | 資源分配的單位 | CPU 執行任務的單位 |
| 記憶體 | 彼此獨立 (隔離) | 共用 Process 資源 |
| 切換開銷 | 大 (需切換虛擬記憶體) | 小 (只需切換執行狀態) |
| 穩定性 | 一個崩潰,不影響其他 | 一個崩潰,導致 Process 結束 |
💡 進階補充:面試官可能會追問 #
Q:為什麼 Thread 切換開銷比 Process 小? #
- Process 切換:os需重新載入記憶體頁表(Page Table)、切換虛擬記憶體空間,非常耗資源。
- Thread 切換:共用記憶體空間,只需要保存並切換少量的暫存器狀態,速度極快。
Q:什麼情況該用多 Process,什麼情況用多 Thread? #
- 多 Process:適合高穩定性要求,或是需要完全隔離的任務(例如 Chrome 的分頁,一個當掉不會影響整體)。
- 多 Thread:適合高並發,且任務之間需要頻繁交換資料的場景(例如 Web 伺服器處理請求),因為它們共享記憶體,傳遞資料的速度最快。