1. 程式人生 > 其它 >平行計算Parallel

平行計算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的高效使用。

  想要更快更方便的瞭解相關知識,可以關注微信公眾號

****歡迎關注我的asp.net core系統課程****
《asp.net core精要講解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core專案實戰》 https://ke.qq.com/course/291868
《基於.net core微服務》 https://ke.qq.com/course/299524