• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

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

    發布: 2010-3-25 11:23 | 作者: 不詳 | 來源: 領測軟件測試網采編 | 查看: 14次 | 進入軟件測試論壇討論

    領測軟件測試網

      探究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.kjueaiud.com/

    TAG: studio Studio visual Visual 探究 Parallel


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>