C#~異步編程再續~大叔所理解的並行編程(Task&Parallel)


返回目錄

並行這個概念出自.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

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

返回目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM