并行计算Parallel

 

 

 

在C#中,并行Parallel和异步Async,都是有来提升应用性能,那看看Parallel的性能怎么样。

Demo是对1百万的数组进行赋值运算,用Benchmark进行测试,调用方式:BenchmarkRunner.Run<TestParallelDemo>();

public class TestParallelDemo
{
    [Benchmark]
    public int[] ParallelForDemo()
    {
        var array = new int[1_000_000];
        Parallel.For(0, array.Length, i =>
        {
            array[i] = i;

        });
        return array;
    }
    [Benchmark]
    public int[] ForDemo()
    {
        var array = new int[1_000_000];
        for (var i = 0; i < array.Length; i++)
        {
            array[i] = i;

        }
        return array;
    }
}

看一下测试中的表现:

Parallel.For并行运算时,8个CPU几乎占满,在拼命运算。

 

 

 for时,只有一个CPU在高水位努力,其他CPU在划水。

 

 

   看一下Benchmark跑出来的结果,Mean值 ,并行运算的耗时1.617ms,2.569ms,相差0.952ms,将近1个ms。

 

 

  并行的前提是有多CPU核心,如果单CPU,或少CPU,在短运算中,不一定比非并行效果要好,因为并行也有数据分区,数据合并,协调类型等的消耗。如果应用是在物理机上,多核心,特别8,16,32核心,那就最好用并行计算了,如果是跑到docker里,那就小心使用,因为基于容器的部署,更多要的是横向服务级的扩展,而不是多CPU的高效使用。

 

  想要更快更方便的了解相关知识,可以关注微信公众号 
 

 

 

 

posted @ 2022-02-11 15:36  刘靖凯  阅读(120)  评论(0编辑  收藏  举报