文章出處

返回目錄

并行這個概念出自.net4.5,它被封裝在System.Threading.Tasks命名空間里,主要提供一些線程,異步的方法,或者說它是對之前Thread進行的二次封裝,為的是讓開發人員更方便的調用它,對于異步與多線程我們在之前的幾講里已經介紹過了,今天主要說說并行,并行也可以叫并行計算,即對于一個大任務,使用多個線程去計算它,這可以充分發揮多核CPU的優勢,可以說是大事所趨!

先看一下并行編程(并行計算)的圖像

對于兩個任務,任務1執行需要1秒,任務2執行需要3秒,那么,如果順序執行,它需要的時間為4秒(1+3),而如果是并行編程,那就運行時間為3秒,即(1和3一起運行,取最長的時間),這就是并行計算的魅力!

下面看兩種并行的實現方式

一 Task實現的并行

      #region 并行Task
            Console.WriteLine(DateTime.Now);
            var task = Task.WhenAll(Task.Run(() => { Thread.Sleep(1000); }), Task.Run(() => { Thread.Sleep(2000); }));//多個task并行執行,不阻塞
            task.ContinueWith((ctw) =>//當task完成后,執行這個回調
            {
                Console.WriteLine("并行完成" + DateTime.Now);
            });
            Console.WriteLine(DateTime.Now);
       #endregion

二 Parallel實現的并行

     #region 并行Parallel
            Console.WriteLine(DateTime.Now);
            Parallel.Invoke(() =>
            {
                Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
                Thread.Sleep(1000);
            }, () =>
            {
                Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
                Thread.Sleep(2000);
            });
            Console.WriteLine(DateTime.Now);
            Console.ReadKey();

          #endregion

通過上面的圖我們可以看到,在進行并行測試時,運行時間為兩秒!

返回目錄


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()