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