首先統一定義:並行(Concurrency)是指兩段或更多程式碼的執行行為看起來像同時在跑;平行(Parallelism)是它們真的同時在跑。
並行需要能在程式碼之間切換執行的環境(如 fibers、threads、processes);平行需要硬體支援(多核心、多 CPU、多台機器)。
一切都是並行的#
在現今的系統中,幾乎不可能寫出沒有並行面向的程式碼。使用者在互動、資料在擷取、外部服務在呼叫——這些全都同時進行。如果強制串列化,系統就會感覺遲鈍,也無法充分利用硬體的力量。
開發者經常談論程式碼之間的耦合,指的是依賴關係。但還有另一種耦合:時間耦合(Temporal Coupling),指程式碼強加了不必要的順序限制。
本章概覽#
| Topic | 說明 |
|---|---|
| Topic 33 - 打破時間耦合 | 使用活動圖分析工作流程,找出哪些事情可以同時發生、哪些必須依序進行,藉此改善並行性 |
| Topic 34 - 不要共用狀態 | 共享狀態是並行程式中最大的麻煩來源。信號量和互斥鎖可以幫忙,但它們本身也充滿陷阱 |
| Topic 35 - 參與者與程序 | Actor 模型讓獨立的程序透過訊息傳遞來溝通,避免共享狀態的問題 |
| Topic 36 - 黑板 | 黑板系統結合物件儲存和發布/訂閱的特性,讓獨立的參與者協同工作,提供高度解耦 |
核心觀點: 並行與平行程式碼過去是特殊需求,現在已成為必備。關鍵在於避免共享狀態,並善用 Actor 和黑板等模式來安全地實現並行。