Windows并發(fā)編程指南

出版時間: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

評論、評分、閱讀與下載


    Windows并發(fā)編程指南 PDF格式下載


用戶評論 (總計40條)

 
 

  •   并發(fā)編程寫的最詳細(xì)的一本書了
  •   多核時代已經(jīng)到來,抓住機遇,研究并發(fā)編程
  •   再多核時代,多線程時代,并發(fā)是處理大量連接,大數(shù)據(jù)交換必須面對的問題。
  •   讓我從這本書開始編程的多核時代吧
  •   這個對于****低版本來說比較合適,對于高版本的可以參考TPL庫的開發(fā)
  •   看完核心編程看著本,本本經(jīng)典
  •   需要有基礎(chǔ)的才能理解
  •   內(nèi)容沒的說,相當(dāng)?shù)暮昧?/li>
  •   收到書,隨便翻了幾頁,書的內(nèi)容不錯,翻譯質(zhì)量也可以。就是排版差了一點,字小,行間距也小,但是沒有湊頁數(shù)的嫌疑。
  •   書背面被折過了,這一點不爽,書是一本好書,值得用心學(xué)習(xí)。
  •   不用說的,值得收藏
  •   講的比較全面,c++和****都講了
  •   老實話,還沒看完,不過前幾章不錯
  •   哦滴個神噢,現(xiàn)在這配送貨速度太快了吧,周一下單周三就收到了,這速度杠杠的
  •   這次很快,東西也很好
  •   隨便翻了翻,《Windows并發(fā)編程指南》還是不錯的
  •   對并發(fā)編程能深入的認(rèn)識和理解
  •   對并發(fā)編程感興趣的朋友不可錯過的一本好書!
  •   外國人寫的書比國內(nèi)的要好很多....
  •   講的很細(xì)致,適合有一定基礎(chǔ)的人。
  •   講的比較深入,適合初級和老鳥.
  •   書不錯,到付也很方便
  •   大致看了一下,對Windows并發(fā)編程寫得很詳細(xì),就是字有點小
  •   感覺內(nèi)容介紹的有點少
  •   爛快遞
  •   一直在找能詳細(xì)講解多線程的書,現(xiàn)在終于找到了,這本書的內(nèi)容從最底層分析了多線程的原理,解答了我一直以來的疑惑。還有就是翻譯的很流暢,不像有些翻譯把原書給糟蹋了,總之非常喜歡,推薦大家收藏
  •   書已經(jīng)收到,總體還行,就是感覺質(zhì)量一般,總之內(nèi)容好就行了。。。嘿嘿
  •   介紹的非常詳細(xì),很有深度,學(xué)習(xí)中
  •   雖然是介紹Windows多線程,但是其中的一些思想,其他平臺應(yīng)該也可以借用,認(rèn)真看總是有收獲
  •   北京文海龍馳圖書有限公司賣的,東西好像不是全新的,外面的一層保鮮膜是后來包上去的,封面已經(jīng)有點臟了,運費還tn 28元,當(dāng)寄多重的東西啊。想買本書的人趕緊了,像是要絕版的樣子了
  •   書背有折痕,首頁書脊的地方松動脫落,嚴(yán)重懷疑是放書架上的樣書
  •   能寫代碼的人很多,但能寫長時間運行不出問題的實時系統(tǒng)程序這樣的人不多,這本書很好,讓我認(rèn)識只自己的不足,正在學(xué)習(xí)當(dāng)中
  •   書本的表面很舊很多劃痕,書本里面的紙質(zhì)量很差,有一股味道,像假書一樣
  •   講得非常細(xì)致,章節(jié)劃分合理,易學(xué)易用,平實順暢
  •   對內(nèi)容 有些失望
  •   多線程中介紹知識點最多的一本。非常推薦多線程進階人士閱讀月?。。。。?/li>
  •   心癢多時,終于入手!
  •   windows 并發(fā)指南
  •   .net并發(fā)編程方面的好書
  •   非常不錯 非常好書
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7