转载

C#~异步编程再续~大叔所理解的并行编程(Task&Parallel)

并行这个概念出自.net4.5,它被封装在System.Threading.Tasks命名空间里,主要提供一些线程,异步的方法,或者说它是对之前Thread进行的二次封装,为的是让开发人员更方便的调用它,对于异步与多线程我们在之前的几讲里已经介绍过了,今天主要说说并行,并行也可以叫并行计算,即对于一个大任务,使用多个线程去计算它,这可以充分发挥多核CPU的优势,可以说是大事所趋!

先看一下并行编程(并行计算)的图像

C#~异步编程再续~大叔所理解的并行编程(Task&Parallel)

对于两个任务,任务1执行需要1秒,任务2执行需要3秒,那么,如果顺序执行,它需要的时间为3秒(1+2),而如果是并行编程,那就运行时间为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 

C#~异步编程再续~大叔所理解的并行编程(Task&Parallel)

二 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 

C#~异步编程再续~大叔所理解的并行编程(Task&Parallel)

通过上面的图我们可以看到,在进行并行测试时,运行时间为两秒!

原文  http://www.cnblogs.com/lori/p/5530219.html
正文到此结束
Loading...