正文

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


行并程編難很。呃,再試一下,并行編程很難。

盡管這個例子有些滑稽,但是我輸入的第一個句子確實能夠反映我們開發(fā)人員在編寫多線程代碼的時候需要面對的一些典型問題。當我在寫這篇序言的時候,我的兩只正在筆記本電腦上打字的手實際上就是兩個完全分開的物理進程。如果您更進一步,將我的每一根手指都考慮為一個獨立的實體,那么就相當于有10個完全獨立的進程。我是一個公認的打字快手,為了在每分鐘內能輸入100個以上的單詞,我的大腦要設法協(xié)調我所有的手指,讓它們能夠并發(fā)地轉移到下一個目標,然而還要確保手指的輸出能夠根據(jù)我腦中想要輸入的內容的拼寫方式進行串行化。在輸入第一個句子時,我故意沒有使用上述協(xié)調機制,這樣我的手指就再也不能正確地同步了。這樣做的結果就是我的想法很難以可讀的方式表現(xiàn)出來。幸運的是,這種錯誤很容易調試。

并行編程實在是很難,至少從歷史上來說一直是這樣。利用一些可用的工具,只有少部分軟件開發(fā)人員能夠熟練掌握成功開發(fā)和調試多線程應用程序的技能??墒?,隨著現(xiàn)代計算機的出現(xiàn),那些需要開發(fā)能夠響應的用戶界面、構建可擴展服務以及為了獲得性能要利用多處理內核的開發(fā)人員們被迫要處理并發(fā)問題,被迫要在線程、互斥量和信號量的層次上開發(fā)軟件。開發(fā)這些軟件的困難在于:申請超額(oversubscription)、競爭條件(race condition)、死鎖(deadlocks)、活鎖(live lock)、二步舞(two-step dance)、優(yōu)先級翻轉(priority inversion)、鎖封護(lock convoy)、偽共享(false sharing)等。

因為有這些復雜性的存在,再加上最近業(yè)界向多核和眾核(manycore)轉移的趨勢,使得并行編程又受到了很多公司的重視,所以很多公司建立了開發(fā)平臺,而Microsoft是這些公司中的領軍者。好幾年前,Microsoft的Parallel Computing Platform團隊就以清晰的愿景和目標出現(xiàn)在了人們的面前:為了讓并行軟件的構建更加簡單。應該讓開發(fā)人員能夠非常簡單地表達存在于應用程序中的并行性,并且要讓底層的框架、運行時和操作系統(tǒng)來為開發(fā)人員實現(xiàn)并行化,能夠將開發(fā)人員表達出來的并行化映射到底層硬件,使其能夠正確且高效地執(zhí)行。Parallel Computing Platform團隊的第一波并行支持組件是在2010年4月份作為Visual Studio 2010的一部分發(fā)布的。不論您使用的是原生代碼還是托管代碼,這一次發(fā)布的內容都提供了簡化并行應用程序開發(fā)的基礎組件。對于使用托管代碼的開發(fā)人員來說,這一次發(fā)布的內容包括:Task Parallel Library、Parallel LINQ、新的Parallel Stacks調試窗口和Parallel Tasks調試窗口、能夠讓您深入查看多線程應用程序執(zhí)行的Concurrency Visualizer,當然還有更多的精彩內容。

盡管有了這些工具的支持,并行編程仍然需要深入的知識。在這個以140個字符短語作為主要交流手段的年代里(特指微博),我個人認為一本高質量的書籍仍然是傳播那些深奧知識的最佳載體。幸運的是,您現(xiàn)在就在閱讀這樣一本書。Gastón Hillar向大家呈現(xiàn)的是一本內容全面的書籍,涵蓋了通過Visual Studio 2010和.NET Framework 4開發(fā)并行應用程序所涉及的方方面面。從基于任務的編程,到數(shù)據(jù)并行化、共享狀態(tài)的管理以及并行程序的調試;從Task Parallel Library到Parallel LINQ、ThreadPool以及新的協(xié)調數(shù)據(jù)結構和同步原語。Gastón以深入淺出的方式為大家講解了.NET Framework 4和Visual Studio 2010中對并行編程的廣泛支持。

本書包含的內容可以幫助您獲得開發(fā)并行應用程序所需的堅實基礎知識。恭喜您已經(jīng)已經(jīng)跨入多核新世界的第一步了。

——Stephen Toub

微軟并行編程平臺首席項目經(jīng)理

2010年9月


上一章目錄下一章

Copyright ? 讀書網(wǎng) www.autoforsalebyowners.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號