出版時間:2010-1 出版社:機械工業(yè)出版社 作者:杜飛 頁數(shù):604 譯者:聶雪軍
Tag標(biāo)簽:無
前言
計算機業(yè)界再次走到了一個十字路口。以多核處理器為代表的硬件并發(fā)性的出現(xiàn),以及不斷增長的軟件復(fù)雜性,都要求業(yè)界的人們重新思考現(xiàn)代計算機的架構(gòu)以及軟件開發(fā)模式。在過去幾十年中,計算機的性能和容量都發(fā)生了指數(shù)級的增長,但底層的計算模型卻沒有根本性的變革。硬件的發(fā)展遵循摩爾定律,時鐘頻率不斷增加,而軟件在發(fā)展過程中也充分利用了這種不斷增長的硬件性能,并且通常要領(lǐng)先于硬件的發(fā)展。硬件與軟件的這種共生關(guān)系一直延續(xù)到最近。盡管摩爾定律仍然有效,但時鐘頻率卻無法再繼續(xù)線性地增長。加州大學(xué)伯克利分校的David Patterson敦授通過一個簡單的等式總結(jié)了在硬件上發(fā)生這種變化的原因:能耗障礙+內(nèi)存障礙+ILP障礙=限制串行性能的障礙CPU的能耗隨著時鐘頻率的增加而增加,因此時鐘頻率存在著一個上限。目前,CPU的散熱能力已經(jīng)達到了一個物理l臨界點。因此,如果沒有強大的(以及昂貴的)冷卻功能(或者在材料技術(shù)上取得突破),那么將不可能在時鐘速度上獲得重大提升。這就是等式中的“能耗障礙”。內(nèi)存性能的提升遠遠落后于處理器性能的提升,這使得在訪問主存時需要的CPU時鐘周期數(shù)量將持續(xù)增加。這就是等式中的“內(nèi)存障礙”。硬件工程師們已經(jīng)采取了猜測執(zhí)行指令(Speculatively Executing Instruction)技術(shù)來提升串行軟件的性能,這種技術(shù)也稱為指令級并行(Instruction I,evel Parallelism,ILP)。ILP對程序性能的提升程度是很難確定的,并且ILP的復(fù)雜性還將提高能耗。因此,ILP帶來的提升同樣存在著局限性,這就是等式中的“ILP障礙”。因此,我們目前到達了一個轉(zhuǎn)折點。軟件系統(tǒng)必須通過進一步的演變來更好地支持多核架構(gòu),而這種演變是需要時間的。為了充分利用提升的計算機硬件性能,并繼續(xù)保持“只需編寫一次,就可以在新硬件上運行得更快”這種模式,開發(fā)人員必須學(xué)習(xí)如何構(gòu)造并發(fā)程序。與并發(fā)的廣泛使用相伴隨的,還有異步性和松耦合、客戶端并行以及服務(wù)器端云計算等,這些技術(shù)使得“軟件+服務(wù)”的模式成為可能。Windows和.NET框架平臺對并發(fā)提供了豐富的支持。這種支持最初在Windows NT對多核處理器的支持中引入的,并且在過去十年中得到了不斷的發(fā)展。Windows在線程調(diào)度性能、同步API以及內(nèi)存層次結(jié)構(gòu)等方面的持續(xù)改進,尤其是在Windows Vista中增加的一些新功能,使Windows操作系統(tǒng)能夠最大限度地發(fā)揮硬件并發(fā)的優(yōu)勢。本書對所有這些領(lǐng)域都進行了介紹。當(dāng)你在應(yīng)用程序中開始大規(guī)模地使用多線程方式時,簡單明了的架構(gòu)設(shè)計將變得非常重要,因為這種架構(gòu)可以有效地降低軟件的復(fù)雜性并提高代碼的可維護性。這就要求開發(fā)人員不僅要理解平臺上的各項功能,而且還要關(guān)注新近出現(xiàn)的各種最優(yōu)方法。本書中,Joe不僅詳盡地介紹各種并發(fā)機制,同時還提出了大量的最優(yōu)方法。毫無疑問,多核提升了現(xiàn)有應(yīng)用程序的性能。不僅如此,它同樣使我們可以從一個完全不同的角度來重新思考計算機為人們提供的各種功能。計算能力的不斷增加,不僅將提升應(yīng)用程序的質(zhì)量從而使其變得更加有用,而且還可以實現(xiàn)一些在過去無法做到的事情。在這種演變過程中,軟件將變得更加個性化和人性化。好好享受本書吧,它為你在Windows平臺上邁出編寫并發(fā)軟件的第一步提供了完備的信息。
內(nèi)容概要
本書詳細(xì)講述Windows并發(fā)編程的相關(guān)知識。內(nèi)容分為四個部分:第一部分“概念”從高層視角介紹并發(fā)的基本概念,為讀者理解并發(fā)打下基礎(chǔ):第二部分“機制”重點介紹了一些基礎(chǔ)的功能、內(nèi)部工作機制以及各種APl等;第三部分“技術(shù)”介紹了一些常見的編程模式、最優(yōu)方法、算法,以及在編寫并發(fā)軟件時需要使用的各種數(shù)據(jù)結(jié)構(gòu);第四部分“系統(tǒng)”介紹了一些在系統(tǒng)架構(gòu)和流程中經(jīng)常出現(xiàn)的問題。 本書內(nèi)容翔實,實例豐富,適合Windows開發(fā)人員、Windows測試人員;和Windows技術(shù)支持人員等參考。
作者簡介
Joe Duffy是微軟公司.NET框架團隊中負(fù)責(zé)并行擴展庫(Parallel Extensions]的開發(fā)管、架構(gòu)師和奠基人。除了編寫代碼和管理開發(fā)團隊之外,他還致力于一些長期性和前瞻性的工作,例如支持并發(fā)安全性的語言和類型系統(tǒng)。他曾在通用語言運行時(CommonI Language Runtime)團隊中
書籍目錄
對本書的贊譽譯著序序前言致謝作者簡介第一部分 概 念 第1章 概述 1.1 為什么需要并發(fā) 1.2 程序架構(gòu)與并發(fā) 1.3 并行的層次 1.4 為什么不需要并發(fā) 1.5 小結(jié) 延伸閱讀 第2章 同步與時間 2.1 程序狀態(tài)的管理 2.1.1 共享狀態(tài)與私有狀態(tài)的區(qū)分 2.1.2 狀態(tài)機與時間 2.1.3 獨立性 2.1.4 不變性 2.2 同步:種類與實現(xiàn)技術(shù) 2.2.1 數(shù)據(jù)同步 2.2.2 協(xié)作與控制同步 2.3 小結(jié) 延伸閱讀第二部分 機制 第3章 線程 3.1 從高層面上來看線程 3.1.1 Windows線程是什么 3.1.2 CLR線程是什么 3.1.3 顯式線程操作及其替代方法 3.2 線程的誕生與消亡 3.2.1 線程的創(chuàng)建 3.2.2 線程終止 3.2.3 DllMain 3.2.4 線程局部存儲 3.3 小結(jié) 延伸閱讀 第4章 線程的高級內(nèi)容 4.1 線程的狀態(tài) 4.1.1 用戶態(tài)線程棧 4.1.2 內(nèi)部數(shù)據(jù)結(jié)構(gòu)(KTHREAD、ETHREAD和TEB) 4.1.3 上下文 4.2 線程的創(chuàng)建過程與終止過程 4.2.1 線程創(chuàng)建的具體流程 4.2.2 線程終止的具體流程 4.3 線程調(diào)度 4.3.1 線程的狀態(tài) 4.3.2 優(yōu)先級 4.3.3 時間片 4.3.4 優(yōu)先級與時間片調(diào)整 4.3.5 睡眠與退讓 4.3.6 掛起 4.3.7 關(guān)聯(lián)性:優(yōu)先在某個CPU上運行 4.4 小結(jié) 延伸閱讀 第5章 Windows內(nèi)核同步機制 5.1 基礎(chǔ)知識:觸發(fā)和等待 5.1.1 為什么要使用內(nèi)核對象 5.1.2 在非托管代碼中執(zhí)行等待操作 5.1.3 托管代碼 5.1.4 異步過程調(diào)用 5.2 內(nèi)核對象的使用 5.2.1 互斥體 5.2.2 信號量 5.2.3 互斥體/信號量使用示例:阻塞/有界的隊列 5.2.4 自動重置事件和手動重置事件 5.2.5 等待定時器 5.2.6 觸發(fā)對象與自動等待 ……第三部分 技術(shù)第四部分 系統(tǒng)第五部分 附錄
章節(jié)摘錄
插圖:總的來說,許多問題都有內(nèi)在的并發(fā)特性。例如,在構(gòu)建一個服務(wù)器程序時,需要考慮到有許多請求會并發(fā)地到來,而服務(wù)器程序必須同時處理這些請求。如果正在編寫處理Web請求的模塊并且需要訪問一些共享狀態(tài),那么也會發(fā)現(xiàn)需要處理與并發(fā)相關(guān)的問題。有時候,我們可以通過并發(fā)來將一些問題以更自然的方式表達出來,但在實際情況中卻很少會使用并發(fā)。人們似乎正在經(jīng)歷一個需要面對大量異步性的困難時期,而這些異步性是隨著各種交互操作的激增而帶來的。于是,人們開始越來越多地使用并發(fā),甚至在一些并不適合的情況中也使用并發(fā)。出現(xiàn)這種現(xiàn)象的原因是由于多處理器架構(gòu)發(fā)生了重大的變化,各種主流計算機都在廣泛地使用并行處理器。多核處理器已經(jīng)占據(jù)了PC市場和移動市場,而高度并行的圖形處理器(Graphics ProcessingUnit,GPU)也隨處可見,有時候甚至用來執(zhí)行普通的圖形計算。為了最大限度發(fā)揮這些新型處理器的強大功能,我們必須以一種可伸縮的方式來編寫程序。這就意味著在程序中必須包含足夠的潛在并發(fā)(Latent Concurrency),這樣當(dāng)采用更新的機器時,這些潛在的并發(fā)將變成真實的并發(fā),而程序的性能也將自動提升。事實上,盡管我們大多數(shù)人都習(xí)慣以串行方式來編寫程序,但在代碼中經(jīng)常會包含大量的潛在并發(fā),這些并發(fā)是由于我們所選擇的編程語言而帶來的。在許多情況下,循環(huán)、if分支和內(nèi)存移動中包含的數(shù)據(jù)依賴性和控制依賴性將限制這種并發(fā),這些限制都是在一些不符合C編程風(fēng)格的代碼上施加的人為限制。相對于過去的編程方式來說,并發(fā)是一種重大的變化,對于客戶端程序來說尤其如此。并行是指通過并發(fā)將一個操作分解為一組粒度更細(xì)的子操作,并且這些子操作可以在不同的處理器上獨立運行。這種思想并非最近才出現(xiàn)的。早在數(shù)十年前,在科學(xué)計算和超級計算機中已經(jīng)通過并行在數(shù)十個、數(shù)百個,甚至數(shù)千個處理器上獲得可伸縮性。然而,一些主流的商業(yè)軟件和Web軟件通常是采用串行方式來編寫的,因為這些軟件的開發(fā)商認(rèn)為CPU的時鐘速度每年都會提升40%~50%,而因此帶來的程序性能提升足以滿足將來的需求。1.2 程序架構(gòu)與并發(fā)我們首先從程序架構(gòu)開始來討論并發(fā)。當(dāng)我們可以在現(xiàn)有的程序中增加并發(fā)性時,如果預(yù)先仔細(xì)地進行設(shè)計,那么將極大降低一些常見缺陷的出現(xiàn)概率。下面這些術(shù)語對于構(gòu)思并發(fā)程序的結(jié)構(gòu)來說是非常有用的,它們在項目的初始設(shè)計階段將帶來極大的幫助:·代理(Agent)。大多數(shù)程序都可以分解為一些獨立的代理。在這里,代理是一個非常抽象的術(shù)語,它包含一些關(guān)鍵的屬性:1)代理的狀態(tài)自始至終都包含在代理的內(nèi)部;2)代理與外部環(huán)境的交互過程是異步的;3)在同級代理之間的關(guān)系通常是松散耦合的。在真實的系統(tǒng)中,代理的表現(xiàn)形式有多種,如Web請求、Windows基礎(chǔ)通信層(Windows Communication Foundation,WCF)的服務(wù)請求、COM組件調(diào)用,以及線程中的異步行為等。而且,在一些程序中只存在一個代理,即程序的入口點。
媒體關(guān)注與評論
“在程序中使用多線程時,簡單明了的架構(gòu)和設(shè)計是常重要的……這要求我們不僅要全面地理解平臺的各項功能,而且還要隨時關(guān)注一些新近出現(xiàn)的最優(yōu)方法。Joe在本書中完美地闡述了并發(fā)的基本理論以及各種最優(yōu)方法。” ——Craig Mundie,微軟公司首席研究與戰(zhàn)略官
編輯推薦
《Windows并發(fā)編程指南》:深入揭示W(wǎng)indows并發(fā)編程理論及實現(xiàn)微軟首席研究與戰(zhàn)略官Craig Mundie作序推薦《Windows并發(fā)編程指南》詳盡地介紹了如何在開發(fā)軟件時高效地使用并發(fā)和硬件并行,以及如何設(shè)計、實現(xiàn)和維護大型的,主要以Windows平臺上的C#和C++等語言編寫的并發(fā)程序。《Windows并發(fā)編程指南》為應(yīng)用程序、系統(tǒng)以及庫等的開發(fā)人員在多核處理器上編寫高效、安全的代碼提供必要的工具和技術(shù)指導(dǎo)。這不僅對于那些存在內(nèi)在并發(fā)性的領(lǐng)域(如服務(wù)器應(yīng)用、計算密集的圖像處理、金融分析、數(shù)值模擬以及AI算法等)來說是很重要的,而且對于一些可以通過并行來獲得加速的領(lǐng)域(如數(shù)學(xué)庫、排序算法、報告生成、XML處理以及流式處理算法等)來說同樣是重要的。《Windows并發(fā)編程指南》主要包括四部分:第一部分從高層視角介紹并發(fā)的一些基本概念;第蘭部分重點介紹一些重要的平臺功能、內(nèi)部工作機制以及API細(xì)節(jié)等;第三部分介紹在編寫并發(fā)軟件時一些常見的編程模式、最優(yōu)方法、算法和數(shù)據(jù)結(jié)構(gòu)等;第四部分介紹在編寫并發(fā)程序時需要注意的一些系統(tǒng)性的架構(gòu)和流程方面的問題。要想學(xué)習(xí)在windows和.NET上進行并發(fā)編程的最優(yōu)方法和通用模式,那么《Windows并發(fā)編程指南》將是你唯一需要的一《Windows并發(fā)編程指南》。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載