.NET 4.0 引入平行運算庫 (TPL, PLINQ),封裝多執行緒複雜度,讓開發者輕鬆將迴圈平行化。但「易用」不等於「無副作用」,特別是 ASP.NET 應用,盲目套用可能導致效能下降甚至癱瘓。本文深度剖析平行運算適用場景與風險。
將單一任務拆解為多個子任務,分配至多核心同時執行。.NET 4.0 前需手動分割資料、管理執行緒、同步結果;TPL 提供 Parallel.For、Parallel.ForEach、Task 等高階抽象,簡化開發。
IIS 執行緒池同時處理多個請求,每個請求一條執行緒。單一請求若再開啟平行執行緒,會與其他請求爭奪 CPU 核心,導致上下文切換暴增、吞吐量下降。
Web 開發者鮮少接觸底層執行緒同步,TPL 簡單語法(如 Parallel.ForEach(list, item => { ... }))極易誤以為是「免費加速」,忽略共享狀態、鎖競爭、非執行緒安全元件等陷阱。
Task.Run 卸載至背景執行緒池,但需控制併發度(MaxDegreeOfParallelism)。async/await) 而非平行運算,釋放執行緒處理更多請求。ParallelOptions.MaxDegreeOfParallelism(如 Environment.ProcessorCount / 2)。ConcurrentBag、ConcurrentDictionary 等無鎖集合避免手動鎖定。平行運算是利器,亦是雙面刃。ASP.NET 開發者應建立「非同步優先、平行謹慎」的架構思維。