一、概述
首先应该明白并行和并发的区别。
并发就是有多个几乎同时到达的线程需要被处理,但只有有限个CPU,所以需要竞争上岗。
并行指有多个CPU资源同时处理多个线程,不存在竞争的概念,可以大量节省运行时间。
二、实现方法
C#中目前有Tasks命名空间中的Parallel类来完成并行开发。
2.1 Parallel
Parallel类有三个常见的方法:Invoke,For,Foreach,都可以实现多个方法的并行计算。For和ForEach方法多次调用同一个方法, Invoke可以同时调用不同的方法。
2.12 Invoke
stopWatch.Start();
Parallel.Invoke(() => { Run1(); }, () => { Run2(); });
stopWatch.Stop();
Console.WriteLine("Parallel run " + stopWatch.ElapsedMilliseconds + " ms.");
该方法可以将串行方法并行化,可以调用StopWatch类进行计时。
2.12 For
Parallel.For()可以无序并行运行迭代,类似for循环。
ParallelLoopResult result = Parallel.For(0, 100, (int i, ParallelLoopState pls) =>
{
Console.WriteLine("i: {0}, task : {1}", i, Task.CurrentId);
Thread.Sleep(10);
});
2.13 ForEach
该方法无序遍历实现IEnumerable或者List集合。
List<int> list = new List<int>();
list.Add(0);
Parallel.ForEach(list, item =>
{
A(item);
});