現代作業系統採用 **搶占式多任務調度**。單核 CPU 透過極短時間片 (Windows ~20ms) 快速切換執行緒,欺騙人眼產生「同時運行」假象 (人眼感知閾值 ~100ms)。
Thread.CurrentThread.ManagedThreadId 不等於 OS Thread ID| 維度 | 多進程 | 多線程 |
|---|---|---|
| 隔離性 | 極強 (記憶體完全隔離) | 弱 (共享記憶體) |
| 通訊成本 | 高 (IPC、Socket、共享記憶體) | 低 (直接訪問共享變數) |
| 上下文切換 | 慢 (換頁表、TLB 刷新) | 快 (共用地址空間) |
| 穩健性 | 單進程崩潰不波及其他 | 單線程崩潰可能拖垮進程 |
| 適用場景 | 粗粒度、低同步、高隔離 | 細粒度、高頻同步、共享狀態 |
Microsoft .NET 平行擴充庫 (TPL, PLINQ, Async/Await) 旨在**抽象化線程管理**,讓開發者專注「並行邏輯」而非「線程機制」。但理解底層細節仍是寫出高效代碼、排查效能問題的前提。
代碼在**並行/併發執行**時行為正確 (符合規格),即為線程安全。單執行緒無此問題 (單一控制流)。
lock / Monitor / Mutex / SemaphoreSlim — 同一時間只允許一執行緒進入臨界區Interlocked / ConcurrentDictionary / Immutable Collections — 硬體原子操作 / 無鎖資料結構ThreadLocal<T> / [ThreadStatic] — 狀態不共享,自然安全System.Collections.Concurrent.* — **注意:標準泛型集合 `List深入剖析 **鎖的實現原理 (Monitor、SpinLock、ReaderWriterLockSlim)**、無鎖資料結構設計、**記憶體模型與 volatile/Interlocked**、死鎖/活鎖/飢餓診斷與預防**、非同步程式模式 (APM/EAP/TAP) 與執行緒池交互。