关于 Parallel.ForEach 并行库的一个问题

ayun00 2016-09-11 08:59:45
Parallel.ForEach 的MaxDegreeOfParallelism 参数是不是对 主机的cpu核心有要求?
vps和云服务器的cpu 核心数 是不是有区别?

我的程序要批量调用一个webapi接口, 以前在自己的电脑上MaxDegreeOfParallelism=10,跑的不错,然后放在了亚马逊云上(那个免费的1cpu核心,1g内存的微服务器),跑的也很流畅
然后前几天亚马逊云要收费了就换了一个vps, 然后这程序就卡主了,以前跑这个1s左右, 现在要3-10分钟, 最开始是怀疑网络有问题
检查了下网络 ,确实是比亚马逊云慢些, 亚马逊的网络延时大概是40ms ,这个要400ms, 但是就算不用并行一个个的访问也不要这么久啊 ,然后就查看代码 ,看到MaxDegreeOfParallelism这里,想到以前看到资料说, 多任务进程最好不要超过核心数的2倍, 然后改成MaxDegreeOfParallelism=4, 立马就只需要5-10s了,
这是为什么有这么大的区别?
...全文
681 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayun00 2017-01-24
  • 打赏
  • 举报
回复
引用 8 楼 sp1234 的回复:
[quote=引用 6 楼 ayun00 的回复:] [quote=引用 5 楼 sp1234 的回复:] 倒是网络带宽跑满
不清楚做vps服务商的是不是有什么特殊的限制,还是软件本身有性能瓶颈 在上面架设文件服务器,单文件可以达到500K下载速度, 多文件总的下载速度可以达到2000K, 按理来说我的瞬发不会超过这个限制? 我询问服务商是否有限制,得到的回答都是没有[/quote] 你在 #3 楼说询问了有结果,原来你也是不知道结果啊。 那么你可以判断一下,并发数达到多少,就被人家系统禁止。[/quote] 是2个层面, 服务商是说自己没有限制, 但是网络到国内的线路节点不是很通畅
ayun00 2017-01-23
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
倒是网络带宽跑满
不清楚做vps服务商的是不是有什么特殊的限制,还是软件本身有性能瓶颈 在上面架设文件服务器,单文件可以达到500K下载速度, 多文件总的下载速度可以达到2000K, 按理来说我的瞬发不会超过这个限制? 我询问服务商是否有限制,得到的回答都是没有
  • 打赏
  • 举报
回复
倒是网络带宽跑满
  • 打赏
  • 举报
回复
引用 3 楼 ayun00 的回复:
cpu 没有跑满, 询问过服务商, 是说vps 到国内的网关有问题 , 不过还是很奇怪
cpu 没跑满,倒是网络带宽跑慢了,所以卡死了。 那么这个考虑cpu数量、考虑 MaxDegreeOfParallelism 参数,都无能力为力。只能是具体环境具体测试,才知道结果啊。
ayun00 2017-01-23
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
你的线程执行的任务之间有锁的逻辑吗?可能在逻辑上有问题,此时你可以观察CPU 平均使用,如果不是达到95%以上(CPU根本没有打满),就说明是自己程序的问题。 一般来说,不设置这个参数,让 PLinq 和系统线程池自己去优化,比较好。
cpu 没有跑满, 询问过服务商, 是说vps 到国内的网关有问题 , 不过还是很奇怪
xuzuning 2017-01-23
  • 打赏
  • 举报
回复
Parallel 只用于 Intel CPU
  • 打赏
  • 举报
回复
引用 6 楼 ayun00 的回复:
[quote=引用 5 楼 sp1234 的回复:] 倒是网络带宽跑满
不清楚做vps服务商的是不是有什么特殊的限制,还是软件本身有性能瓶颈 在上面架设文件服务器,单文件可以达到500K下载速度, 多文件总的下载速度可以达到2000K, 按理来说我的瞬发不会超过这个限制? 我询问服务商是否有限制,得到的回答都是没有[/quote] 你在 #3 楼说询问了有结果,原来你也是不知道结果啊。 那么你可以判断一下,并发数达到多少,就被人家系统禁止。
bwangel 2017-01-23
  • 打赏
  • 举报
回复
是不是服务端卡住了。因为并行时,服务端线程池很容易占满迟迟不能释放。 这个不取决于客户端的并行调用,取决于服务端的并发处理能力。
  • 打赏
  • 举报
回复
你的线程执行的任务之间有锁的逻辑吗?可能在逻辑上有问题,此时你可以观察CPU 平均使用,如果不是达到95%以上(CPU根本没有打满),就说明是自己程序的问题。 一般来说,不设置这个参数,让 PLinq 和系统线程池自己去优化,比较好。
ayun00 2016-09-11
  • 打赏
  • 举报
回复
MaxDegreeOfParallelism=2 的时候 ,执行速度在8-12s
并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。

111,110

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧