CPU 製造商不斷將更多電晶體塞進晶片,增加核心數量,然後要求開發者善加利用這些核心。多執行緒程式在多核心上運行時,各執行緒會盡量避免彼此協調以追求最大速度,導致程式以非確定性(nondeterministic)方式執行——每次運行的執行順序都可能不同。這使得許多傳統除錯技巧失效,例如你無法可靠地從問題點向上或向下追蹤,因為目標本身就在移動。
本章涵蓋的技術主要針對明確使用低階並行建構(low-level concurrency constructs)的程式碼,適用於作業系統、資料庫、遊戲引擎或函式庫等系統程式碼,以及維護既有的遺留軟體。大多數應用層級的軟體應優先使用高階並行抽象層,而非低階建構。如果你花費大量時間除錯新撰寫的並行程式碼,那可能代表方向有誤。
本章的七個條目從事後分析 deadlock、錄製重播、專用工具偵測、隔離非確定性、調查可擴展性、定位 false sharing,到以高階抽象重寫,提供了一套完整的多執行緒除錯策略。