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

  1. 云栖社区>
  2. 博客>
  3. 正文

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

mcy247 2017-12-05 21:18:00 浏览574
展开阅读全文

并行这个概念出自.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

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

本文转自博客园张占岭(仓储大叔)的博客,原文链接:C#~异步编程再续~大叔所理解的并行编程(Task&Parallel),如需转载请自行联系原博主。

网友评论

登录后评论
0/500
评论
mcy247
+ 关注