名詞定義
- 併發:單位時間內多個程序在同一 CPU上處於「已啟動到運行完畢」之間。包含同步與互斥關係。
- 互斥:進程搶佔臨界資源,同一時刻僅一個進程可用。
- 同步:進程間相互依賴,前一個輸出是後一個輸入;無輸出則等待。
- 偽併發 vs 真併發:單核分時複用為偽併發;多核同時執行為真併發。
- 並行:多處理器上多任務同時執行。並行必併發,併發不必並行。
- 多線程:程式設計邏輯層概念,進程內並發執行的代碼片段,可實現切換執行。
- 異步:調用者不等待被調用者完成,繼續執行後續邏輯。多線程是實現異步的手段之一(亦可用多進程、事件循環等)。
生活化例子:燒水、舉鐵、洗衣
| 任務 | 步驟與耗時 |
| 燒水 | 準備1分 → 等待8分 → 關火1分 |
| 舉鐵100下 | 持續10分(CPU 密集) |
| 洗衣 | 準備1分 → 等待5分 → 關機1分 |
單核同步:27 分鐘
依序執行,等待期間 CPU 空轉。
單核異步(多線程模擬):14 分鐘
利用等待間隙切換任務:
準備燒水(1) + 準備洗衣(1) + 舉鐵50下(5) + 關洗衣機(1) + 舉鐵20下(2) + 關燒水機(1) + 舉鐵30下(3) = 14 分鐘。
雙核異步並行:10 分鐘
- 核心1:準備燒水(1) + 舉鐵50下(5) + 等待3 + 關火(1)
- 核心2:準備洗衣(1) + 舉鐵50下(5) + 關洗衣機(1) + 等待3
真正同時執行,總耗時取決於最長鏈路。
關鍵洞見
- 同步 vs 異步:I/O 等待時,同步阻塞浪費 CPU;異步切走做別事。
- CPU 密集任務(如舉鐵)在單核下,多線程無優勢(甚至因切換開銷變慢)。
- 多線程 ≠ 異步:多線程是實現異步的常用手段,但寫正確的異步代碼比多線程難;多線程本質仍是同步執行,靠 OS 調度實現「準異步」。
- 多核才是質變:只有多核才能真正並行,突破單核時間片輪轉的物理極限。
理解這些概念邊界,是寫出高效併發程式的基石。