并行计算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的高效使用。
想要更快更方便的了解相关知识,可以关注微信公众号
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言
2017-02-11 面向对象设计的五大原则