探究Visual Studio 2010中Parallel的使用(1)

發表于:2010-03-25來源:作者:點擊數: 標簽:Parallel探究StudioVisualvisual
探究Visual Studio 2010中Parallel的使用(1) 軟件測試 之前51cto曾經報道過關于Visual Studio 2010中Parallel類實現并行計算,本文我們主要分析如何利用Parallel.For和Parallel.ForEach函數來并行化for循環和foreach循環。實際上,Parallel.For和Parallel.Fo

  探究Visual Studio 2010中Parallel的使用(1) 軟件測試

  之前51cto曾經報道過關于Visual Studio 2010中Parallel類實現并行計算,本文我們主要分析如何利用Parallel.For和Parallel.ForEach函數來并行化for循環和foreach循環。實際上,Parallel.For和Parallel.ForEach函數主要是針對“并行數據”的并行化操作,所謂并行數據,就是整個數據集中數據單元是相互獨立的,可以同時進行處理。

  在實際開發中,我們遇到的可以并行處理的不僅包括“并行數據”,還包括可以同時進行的“并行邏輯”。所謂“并行邏輯”,就是相互獨立,可以同時執行的多個任務。比如,程序員陳良喬每天早上要做兩件事情:燒水洗臉和鍛煉身體。這兩件事情就是相互獨立可以并行的,也就是說他在燒水的時候可以同時鍛煉身體。在以前的單核時代,CPU在同一時間只能完成一件事情,那么陳良喬只能先燒水后鍛煉,或者是先鍛煉后燒水,這導致他上班總是遲到。

  進入多核時代,CPU可以在同一時間完成多件事情了,借助.Net Framework 4.0中的Parallel類,我們可以方便地處理“并行邏輯”?,F在,程序員陳良喬可以一邊鍛煉一邊燒水,再也沒有遲到過了。他逢人便說:“Parallel真是個好東西!自從用了它,我腰也不酸了,背也不疼了,編程更有勁兒了”

  使用Parallel.Invoke處理并行邏輯

  跟Parallel.For函數相似,Parallel.Invoke也是Parallel類的一個靜態函數,它可以接受一個Action[]類型的對象作為參數,這個對象,就是我們要執行的任務。系統會根據代碼運行的硬件環境,主要是CPU運算核心的個數,自動地進行線程的創建和分配。這有些類似于我們所熟悉的多線程開發,通過為每個線程指定一個線程函數而讓多個任務同時進行,只是Parallel.Invoke函數簡化了線程的創建和分配等繁瑣的動作,我們只需要提供核心的線程函數就可以了。下面我們來看一個實際的例子。在上文中,我們介紹了程序員陳良喬起床的例子,在以前的單核時代,他起床大約是這個樣子的:

  // 串行式起床 private static void GetUp() { Start("GetUp"); // 先燒水 boil(); // 后鍛煉 exercise(); End("GetUp"); } // 鍛煉 private static void exercise() { Console.WriteLine("Exercise"); Thread.Sleep(2000); Console.WriteLine("Finish Exercise"); } // 燒水 private static void boil() { Console.WriteLine("Boil"); Thread.Sleep(3000); Console.WriteLine("Finish Boil"); }

  在單核時代,CPU在同一時間只能做一件事情,所以他只能先燒水,后鍛煉,這樣顯然會耽誤時間。一天,他又因為這事而遲到了,老板罵道,“你是豬啊,你不會用Parallel.Invoke一邊燒水一邊鍛煉啊?”于是,有了下面的并行式起床:

  // 并行式起床 private static void ParallelGetUp() { Start("ParallelGetUp"); // 在燒水的同時,鍛煉身體 var steps = new Action[] { () => boil(), () => exercise() }; Parallel.Invoke(steps); End("ParallelGetUp"); }

  通過Parallel.Invoke函數,我們將一些相互獨立的任務同時執行,實現了“并行邏輯”,也大大地提高了應用程序的性能和效率。從下面的截圖中,我們可以明顯地看出兩種方式的差別。串行方式所耗費的時間,是兩個步驟的時間總和,而并行方式所耗費的時間,大約是單個任務的耗時最長的哪一個。

圖1 串行和并行的執行情況

  圖1 串行和并行的執行情況

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97