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