命令式資料並行
visual c# 2010和.netframework4.0提供了很多令人激動的新特性,這些特性是為應對多核處理器和多處理器的複雜性設計的。然而,因為他們包括了完整的新的特性,開發人員和架構師必須學習一種新的程式設計模型。
這一章是一些新的類、結構體和列舉型別,你可以使用這裡來處理資料並行的場景。這章將為你展示怎樣建立並行**和描述與每個場景相關的新概念,而不是關注併發程式設計中的最複雜的問題。這樣你將可以更加充分的理解效能改進。
開始並行任務
使用先前版本的.net framework,開發可以充分利用多核微處理器的並行能力的應用程式是很難的。使用那些可以控制並行的複雜結構來開始、控制、管理和同步多執行緒是必要的,但是這對現代的多核系統並不十分有效。
.net 4引入了新的任務並行庫(tpl),其產生在多核時代並且就是第一章中展示的輕量級併發程式設計模型。
為了支援資料並行、任務並行和管道,tpl提供了乙個輕量級的框架,可以幫助開發人員應對不同的並行場景,實現基於任務模型的設計,而不是使用重量級複雜的執行緒進行工作。這些場景包括
資料並行---這裡有很多的資料,並且每條資料都必須施加相同的操作。如圖2-1,使用256位鍵的aes演算法加密100個unicode字串。
圖2-1
任務並行---如圖2-2,這裡有很多不同的操作可以並行執行,充分的利用並行的有力。例如,產生檔案的雜湊編碼,加密unicode字串,建立的縮圖。
圖2-2
管道---如圖2-3,這裡混雜了任務和資料並行。這是最複雜的場景,因為它總是需要協調多個特定的併發任務。例如,以使用256位鍵的aes演算法加密100個unicode字串,然後為每個加密的字串產生乙個雜湊值。這個管道可以實現同時執行兩個併發執行加密和產生雜湊**兩個任務。每乙個加密的unicode字串為了使用雜湊編碼演算法進行處理而放入佇列中。
圖2-3
當然也存在混合了前邊的所有情況的複雜場景。理解怎樣使用並行任務進行工作的最容易的方式就是使用他們。接下來的章節將會使用詳細的例子覆蓋這些最普遍的場景。
tpl引入了乙個新的命名空間,system.threading.tasks。通過這個命名空間可以訪問.net4引入的新的類、結構體、列舉型別。所以,無論什麼時候你想用tpl,使用這個命名空間是個不錯的主意。
using system.threading.tasks;
這樣你可以避免大量的引用。例如,你可以使用parallel.invoke,而不是使用system.threading.tasks.parallel.invoke.
其中主要的類是task,它代表乙個非同步的併發操作。然而,沒有必要為了建立並行**直接使用task的例項。有時,最好的選擇是建立並行的迴圈和區域。在這些場景中,你可以使用靜態類parallel提供的方法進行工作,而不是使用更底層的task例項。
parallel.for---提供一種負載均衡的,潛在並行執行固定數目相互獨立的for迴圈迭代。
parallel.foreach---提供一種負載均衡的,潛在可以執行乙個獨立的固定數目的for each迴圈迭代。這種方法支援自定義分割槽類,這是你可以完全控制資料的分布。
parallel.invok---提供一種可以潛在執行不相同的操作。
當重構已經存在的**來充分利用潛在的併發優勢時,這些方法是很有用的。然而,理解這些並不是使用parallel.for取代for那樣簡單是很重要的。
嵌入式 資料通訊介面小結 序列並行
資料傳輸的接線方式,大體上就兩種 1.一種是並行介面 2.一種是序列介面。1.並行介面是什麼?用並行方式來傳輸資料的介面。假如我想傳輸幾個8位的資料,那好,微控制器上用8個io傳送資料,每次就能傳送乙個。假如想傳輸幾個16位的資料呢?那就要用16個io!優點是速度快,缺點是占用的io太多了。2.序列...
分布式平行計算MapReduce
1.用自己的話闡明hadoop平台上hdfs和mapreduce的功能 工作原理和工作過程。hdfs 1 第一次啟動 namenode 格式化後,建立 fsimage 和 edits 檔案。如果不是第一次啟動,直接載入編輯日誌和映象檔案到記憶體。2 客戶端對元資料進行增刪改的請求。3 namenod...
分布式平行計算MapReduce
作業要求來自 1.用自己的話闡明hadoop平台上hdfs和mapreduce的功能 工作原理和工作過程。hdfs hadoop distributed file system,hadoop分布式檔案系統 它是乙個高度容錯性的系統,適合部署在廉價的機器上。hdfs能提供高吞吐量的資料訪問,適合那些有...