并行这个概念出自.net4.5,它被封装在System.Threading.Tasks命名空间里,主要提供一些线程,异步的方法,或者说它是对之前Thread进行的二次封装,为的是让开发人员更方便的调用它,对于异步与多线程我们在之前的几讲里已经介绍过了,今天主要说说并行,并行也可以叫并行计算,即对于一个大任务,使用多个线程去计算它,这可以充分发挥多核CPU的优势,可以说是大事所趋!
先看一下并行编程(并行计算)的图像
对于两个任务,任务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
二 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
通过上面的图我们可以看到,在进行并行测试时,运行时间为两秒!