正文

推薦者序

C#并行編程高級(jí)教程 作者:(美)Gastón C.Hillar


2011年6月18日,國(guó)內(nèi)著名的電子商務(wù)網(wǎng)站——京東商城(http://www.360buy.com/)在周年慶典之際舉辦大規(guī)模促銷(xiāo)活動(dòng),在搶購(gòu)狂潮席卷而來(lái)時(shí),京東的服務(wù)器無(wú)法及時(shí)處理數(shù)量龐大的并發(fā)訂單請(qǐng)求而癱瘓,結(jié)果京東CEO劉強(qiáng)東先生的新浪微博幾乎被消費(fèi)者潮水般的抱怨所淹沒(méi)……。這個(gè)例子充分說(shuō)明當(dāng)今社會(huì)對(duì)高性能軟件系統(tǒng)的需求日益突顯,而本書(shū)所介紹的并行計(jì)算技術(shù)就可以應(yīng)用于高性能的軟件系統(tǒng)開(kāi)發(fā)。

再說(shuō)另外一件事。2011年3月,蘋(píng)果公司發(fā)布iPad2,配備了A5 1.0GHz雙核處理器,這標(biāo)志著平板電腦追隨臺(tái)式機(jī)和筆記本電腦一同進(jìn)入“多核時(shí)代”。同樣在2011年,擁有雙核處理器的Android智能手機(jī)取得了驕人的銷(xiāo)售業(yè)績(jī),表現(xiàn)相當(dāng)搶眼……

處理器的“多核化”趨勢(shì)已經(jīng)勢(shì)不可擋,這意味著硬件的計(jì)算能力在持續(xù)增強(qiáng);很明顯,如果軟件不能充分應(yīng)用這些新增的計(jì)算能力,計(jì)算機(jī)硬件技術(shù)進(jìn)步所帶來(lái)的好處就無(wú)法顯現(xiàn)出來(lái)。

所有這一切都告訴我們:并行計(jì)算的時(shí)代已經(jīng)來(lái)臨。

并行計(jì)算并非什么新鮮事物,歷史上人們?cè)跒閾碛卸鄠€(gè)處理器的計(jì)算機(jī)系統(tǒng)開(kāi)發(fā)軟件時(shí),就已經(jīng)深入研究了并行計(jì)算中的許多問(wèn)題,并提出了相應(yīng)的解決方案。

概括起來(lái),可將并行計(jì)算技術(shù)領(lǐng)域大致分為以下三個(gè)比較活躍的子領(lǐng)域:

(1) 并行計(jì)算的理論研究,比如針對(duì)某類(lèi)問(wèn)題設(shè)計(jì)新的更高效的并行算法。

(2) 構(gòu)建并行計(jì)算基礎(chǔ)架構(gòu),比如設(shè)計(jì)新的易于開(kāi)發(fā)并行程序的程序設(shè)計(jì)語(yǔ)言、開(kāi)發(fā)各種并行開(kāi)發(fā)工具、構(gòu)造并行組件庫(kù)等等。

(3) 基于并行計(jì)算基礎(chǔ)架構(gòu)構(gòu)建真實(shí)軟件系統(tǒng)。

本書(shū)介紹的.NET 4“并行擴(kuò)展(Parallel Extensions)”,就屬于上述第2點(diǎn)所涉及的技術(shù)領(lǐng)域。

微軟于2010年發(fā)布的.NET 4包容眾多的技術(shù)亮點(diǎn),本書(shū)作者為何單單選取.NET 4并行擴(kuò)展來(lái)介紹?

筆者本人也曾仔細(xì)研究過(guò).NET 4并行擴(kuò)展這一技術(shù)領(lǐng)域,得到的結(jié)論與作者相同——.NET 4并行擴(kuò)展有其獨(dú)到之處,并且具有廣泛的應(yīng)用前景。

得到上述結(jié)論的依據(jù)是什么?這需要介紹一下并行計(jì)算軟件系統(tǒng)開(kāi)發(fā)技術(shù)的發(fā)展現(xiàn)狀。

當(dāng)前的并行計(jì)算軟件系統(tǒng),多使用操作系統(tǒng)所直接提供的線(xiàn)程來(lái)實(shí)現(xiàn)。開(kāi)發(fā)人員編寫(xiě)代碼“直接操縱”線(xiàn)程完成并行計(jì)算軟件系統(tǒng)的開(kāi)發(fā)工作。更詳細(xì)一點(diǎn)說(shuō),在開(kāi)發(fā)并行計(jì)算軟件系統(tǒng)時(shí),開(kāi)發(fā)人員要依據(jù)具體應(yīng)用場(chǎng)景設(shè)計(jì)或選擇一種并行算法,將整個(gè)數(shù)據(jù)處理工作進(jìn)行切分,然后創(chuàng)建并啟動(dòng)合適數(shù)目的線(xiàn)程,并為每個(gè)線(xiàn)程分配特定的工作任務(wù)。由于一個(gè)算法通常會(huì)同時(shí)存在串行/并行的部分,因此要保證各工作線(xiàn)程之間滿(mǎn)足特定的執(zhí)行順序需求。除此之外,開(kāi)發(fā)人員還需要確保各線(xiàn)程都能安全地存取共享資源,并妥善處理系統(tǒng)運(yùn)行期間可能出現(xiàn)的各種異常,……,到了最后,在所有功能開(kāi)發(fā)完畢并通過(guò)測(cè)試之后,還需要依據(jù)系統(tǒng)運(yùn)行的真實(shí)軟硬件環(huán)境進(jìn)行性能調(diào)優(yōu)。

與單線(xiàn)程程序相比,多線(xiàn)程程序的開(kāi)發(fā)需要考慮的事項(xiàng)更多,另外,由于同時(shí)存在多個(gè)同時(shí)運(yùn)行的線(xiàn)程,多線(xiàn)程程序的調(diào)試也變得復(fù)雜起來(lái)。有那么一句雖然不太精確卻十分形象的評(píng)論:“多線(xiàn)程程序的開(kāi)發(fā)難度是完成同樣功能的單線(xiàn)程程序的10倍。”

必須設(shè)法提升并行程序的開(kāi)發(fā)效率。為此,Java平臺(tái)和.NET平臺(tái)都針對(duì)多線(xiàn)程開(kāi)發(fā)提供了功能完備的類(lèi)庫(kù),這使得多線(xiàn)程程序的開(kāi)發(fā)難度降低了不少,但仍然相當(dāng)麻煩。

在大量的軟件開(kāi)發(fā)實(shí)踐中,人們發(fā)現(xiàn):在更高的抽象層次上開(kāi)發(fā)是提升開(kāi)發(fā)效率的有效途徑。.NET 4的并行擴(kuò)展(Parallel Extensions)走的正是這條路。

.NET 4并行擴(kuò)展的核心是“任務(wù)并行庫(kù)(TPL:Task Parallel Library)”,它將并行程序的“構(gòu)造單元”從“線(xiàn)程(Thread)”提升到“任務(wù)(Task)”,將任務(wù)分派給線(xiàn)程的工作由TPL負(fù)責(zé)完成,有效降低了.NET平臺(tái)上并行計(jì)算程序的開(kāi)發(fā)難度,提升了開(kāi)發(fā)效率。

本書(shū)主要介紹基于.NET 4中的并行擴(kuò)展開(kāi)發(fā)高性能軟件系統(tǒng)所需的知識(shí)與技能,從并行計(jì)算理論到實(shí)際代碼再到輔助開(kāi)發(fā)工具,娓娓道來(lái),內(nèi)容緊貼實(shí)際,詳盡實(shí)用。

以下是本人的閱讀建議。

不熟悉TPL的讀者需要通讀本書(shū)的第2章~第6章,這部分內(nèi)容系統(tǒng)介紹了TPL的基本使用方法,為實(shí)際開(kāi)發(fā)所必需。另外,在閱讀之前,不妨先看看附錄A以“統(tǒng)觀(guān)全局”。

以下是本書(shū)各章節(jié)中的一些值得重點(diǎn)關(guān)注的亮點(diǎn):

第1章中有關(guān)并行計(jì)算的經(jīng)驗(yàn)之談很有價(jià)值,需要反復(fù)品味。

第7章對(duì)Visual Studio 2010 并行程序調(diào)試器進(jìn)行了詳盡介紹,各種技巧一覽無(wú)余,是本人所看過(guò)的相關(guān)書(shū)中介紹得最清楚的。

第8章對(duì)線(xiàn)程池的介紹非常重要,它是理解TPL工作原理的關(guān)鍵。

第10章有關(guān)并行測(cè)試和調(diào)優(yōu)的介紹很精彩。

第11章介紹了如何集成Intel所提供的非托管函數(shù)庫(kù)提升軟件系統(tǒng)性能,很有參考價(jià)值。

附錄B展示了UML并發(fā)模型,從事“面向?qū)ο笙到y(tǒng)分析與設(shè)計(jì)(OOAD:Object Orient Analysis & Design)”的系統(tǒng)架構(gòu)師們可能會(huì)對(duì)它感興趣。

附錄C介紹了微軟所提供的一組TPL附加示例,建議讀者好好地閱讀一下這些示例代碼,從中可以學(xué)到比較規(guī)范的并行編程技巧,很有參考價(jià)值。

下面向讀者介紹一下.NET 4并行擴(kuò)展的主要應(yīng)用領(lǐng)域。

作為.NET 基類(lèi)庫(kù)的有機(jī)組成部分,.NET 4并行擴(kuò)展可以用于傳統(tǒng)的桌面和服務(wù)器端應(yīng)用程序。

需要特別指出的是:在微軟云計(jì)算平臺(tái)(Azure)中,同樣可以使用.NET 4并行擴(kuò)展以充分利用“云”所提供的強(qiáng)大計(jì)算和數(shù)據(jù)處理能力,而且本人已經(jīng)在互聯(lián)網(wǎng)上看到了先例,使用TPL開(kāi)發(fā)能并行執(zhí)行SQL命令和啟動(dòng)多個(gè)并行數(shù)據(jù)處理任務(wù)的組件庫(kù)。

.NET 4并行擴(kuò)展的應(yīng)用領(lǐng)域同樣延伸到了Windows Phone和XBox,比如在Codeplex網(wǎng)站上就有一個(gè)PortableTPL項(xiàng)目(http://portabletpl.codeplex.com/),使用它就可以在Windows Phone和XBox的游戲及應(yīng)用開(kāi)發(fā)中使用TPL。

閱讀完本書(shū)之后,我相信讀者也會(huì)同意我們的觀(guān)點(diǎn),.NET 4并行擴(kuò)展有著廣泛的應(yīng)用前景,是一項(xiàng)值得認(rèn)真學(xué)習(xí)的技術(shù),而本書(shū)能為讀者掌握這一技術(shù)提供切實(shí)的幫助。

最后感謝兩位譯者的辛勤工作,將這本有很大實(shí)用價(jià)值的書(shū)奉獻(xiàn)給中國(guó)的讀者。在此也希望所有讀者都能讀有所獲。

金旭亮          

2011年11月作于北京理工大學(xué)


上一章目錄下一章

Copyright ? 讀書(shū)網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)