关于c#并行的疑问
Parallel的For适用于单个作业耗时长,且没有前后作业依赖或其他锁的情况。
你的这个测试并不能很好的体现它的优势。
■网友
本质原因:for(int i=0;i\u0026lt;1000000000;++i){ var x = 0; x += i;}
里面内容直接没了……
Parallel.For其实里面内容也没了,不过内部分组并行省不了。
MSVC效果更明显:
编译器:“哦哦哦,我晓得!你就想返回0嘛!直说嘛!”
其实我就是来推销一下宇宙第一IDE……在学习的过程中,合理使用这个东西:
对理解编译器和运行机制非常有帮助。
■网友
并不是没效果,差了一个数量级呢,你忘了reset~_~
----当然,是并行的方式慢了一个数量级
原因呢,就是你给了一个极不利于并行计算的场景:循环节里做的事太小(甚至release时你那两句话完全不生成代码),这样cpu都花在线程调度上了,偏偏循环次数又很多
如果你想要找并行计算占优的例子,构造一个CPU密集型的循环节就可以了,比如下边这个。我这里的耗时是2916:5276。如果你把我用的常量“8”放大,最终速度比会达到理论值,即1:cpu个数using System;using System.Diagnostics;using System.Linq;namespace ConsoleApplication1{ class Program { static void Main(string args) { var aa = Stopwatch.StartNew(); Enumerable.Range(0, 8).AsParallel().ForAll(i =\u0026gt; { var sum = 0L; sum += func(); }); Console.WriteLine(aa.ElapsedMilliseconds); aa.Reset(); aa.Start(); for (var i = 0; i \u0026lt; 8; i++) { var sum = 0L; sum += func(); } Console.WriteLine(aa.ElapsedMilliseconds); Console.ReadKey(); } static long func() { return Enumerable.Range(0, 50000000).Select(i =\u0026gt; (long)i).Sum(); } }}
■网友
这种跑2秒的例子没多大区别很正常吧。。
楼主试下矩阵乘法玩玩
■网友
涉及会阻塞的才快,一般这种提速在数据库快速插入的时候可能体现明显
■网友
【关于c#并行的疑问】 楼主用多线程吧,开个100说不定就飞起来了
推荐阅读
- 过节■江苏省委省政府办公厅下发关于做好2021年元旦春节期间有关工作的通知
- 银行的数据中心可以跳槽去互联网公司吗
- 为啥工商银行的用户体验如此之差
- 直播会成为品牌传播的另一个途径么有哪些可行的方法感觉有戏又没头绪好捉急。
- |徐州市出台《关于优化创新创业生态系统 提升区域科技创新活力的实施意见》及实施细则
- 雨下|全球关于禁售燃油车只是理论上可行吗
- 关于用phpfsocket 写Post, 模拟http 报文怎样写入要传输的处理数据
- 封面新闻|耀出行:滴滴解决你代步的“温饱”问题,我来满足你出行的仪式感需求
- 智叔|很多家长还在整箱买:谈谈关于牛奶的17个真相警惕这些列入黑名单的“假牛奶”
- |中国驻法使馆:法方不谴责虐杀平民反而指责声讨暴行的人