并行计算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
《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