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
复制代码

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

返回目录

posted @   张占岭  阅读(5982)  评论(6编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2012-05-26 Attribute有啥用~MVC中标准的用户登陆验证
2011-05-26 为JS和C#类加一个扩展方法吧:P
2011-05-26 说说面向对象的故事,主人是人类!(三)
点击右上角即可分享
微信分享提示