C# 并行运算方法简析

一、概述
首先应该明白并行和并发的区别。
并发就是有多个几乎同时到达的线程需要被处理,但只有有限个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);
 });