這是一本論述多處理器編程理論與實踐的綜合巨著!
看這本書的讀者應具備一定的離散數學基礎知識,能夠理解“大O”符號的含義,以及它在NP完全問題中所起的作用;熟悉計算機系統的基本組成部件,如處理器、線程、高速緩存等;為了能夠理解書中的實例,還需要具備初步的Java知識(在使用這些高級程序設計語言之前,闡述了語言的相關功能特征)。書中提供兩處附錄以供讀者參考:附錄A包含程序設計語言的相關知識,附錄B給出了多處理器體系結構的相關內容。
圖書的前三分之一,講述并發程序設計原理,介紹并發程序設計人員的一般編程思路。就像掌握汽車駕駛、烹飪和品嘗魚子醬一樣,并發思維需要培養,需要適當的努力才能學好。對于那些希望立刻動手編程的讀者可以跳過這一部分的大多數內容,但需要閱讀第2章及第3章的內容,因為這兩章包含了理解本書其他部分必不可少的基本知識。首先,討論了經典的互斥問題(第2章),提到了諸如公正和死鎖這樣的基本概念,這對于理解并發程序設計的難點尤為重要。隨后,結合并發執行和并發設計中可能出現的情形和開發環境,提出了并發程序正確性的定義(第3章);研究了對并發計算至關重要的共享存儲器的性質(第4章);介紹了幾種為獲得高并發性數據結構而使用的同步原語(第5、6章)。
對于每一位渴望真正掌握多處理器編程技術的程序設計人員來說,花上一定的時間去解決本書第一部分所提及的問題是很必要的。雖然這些問題都是理想化的,但它們為編寫高效的多處理器程序提供了非常有益的編程思想。尤為重要的是,通過問題解決中提取的思維方式,能夠避免出現那些初次編寫并發程序的設計人員普遍易犯的錯誤。
本書接下來的三分之一講述并發程序設計的實踐部分,每章都有一個次主題,闡明一種特定的程序設計模式或者一種算法技巧。第7章從系統級和語言級兩個不同的抽象層面,討論了競爭及自旋轉鎖的概念,強調了底層系統結構的重要性,指出對于自旋轉鎖性能的理解必須建立在對多處理器層次存儲結構充分理解的基礎上。第8章討論了等待及監控鎖的概念,這是一個常用(特別是在Java中)的同步用語。第16章討論了工作竊取及并行性問題,第17章則介紹了設計并發應用程序時經常使用的路障技術。
本書其他章節主要講述并發數據結構。它們均以第9章為基礎,因此建議讀者在閱讀其他章節前先閱讀第9章的內容。第9章使用鏈表結構說明了不同的同步模式,包括粗粒度鎖、細粒度鎖及無鎖結構。第10章使用先進先出隊列說明了使用同步原語時可能出現的ABA同步問題,第11章使用堆棧描述了一種重要的同步模式——消除;如何利用算法固有的并行性則運用哈希表來描述(第13章),高性能的并行搜索技術借助跳表來闡述(第14章),而如何通過降低正確性標準來提高性能則通過優先隊列進行了闡述(第15章)。
最后,在第18章介紹了目前并發問題中新出現的事務方法,這種方法在今后的研究中會越來越重要。
并發的重要性并沒有被人們廣泛認可,這里有一段引用1989年紐約時報關于IBM PC中新型操作系統文章的評論:
真正的并發(當你喚醒并使用另一個程序時原來的程序仍繼續運行)是非常令人振奮的,但對普通的使用者來說用處很小。您能有幾個程序在執行時需要花費數秒甚至更多的時間呢?
閱讀本書,一切由您選擇。