一、概述
首先應該明白并行和并發的區別。
并發就是有多個幾乎同時到達的線程需要被處理,但只有有限個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);});