平行計算Parallel
阿新 • • 發佈:2022-02-11
在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