C# 多线程 CPU 占有率高

飘飘故我在 2015-09-08 08:33:29
我写的程序,相同环境,在我电脑上运行,CPU都在40%左右。但是换到客户计算机上,就高达90%。不知道为什么?

我PC:内存: 4G;CPU :i3;系统:Win7-64bit


客户PC:内存: 4G,CPU :E5-2650;系统:windows server2008-64bit
...全文
870 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
足球中国 2015-09-11
  • 打赏
  • 举报
回复
40%已经是相当高了,啥程序能要这么高的计算。
lulianqi 2015-09-11
  • 打赏
  • 举报
回复
多线程是CPU处理的事情。正常的WINDOWS的PC平时有个1,2000条线程同时运行也很正常。而多开线程对性能(或是cpu占用率)的影响一般情况下也不用十分在意,因为对于主流PC线程切换的性能损耗应该是纳米级的,而线程阻塞更不会对cpu占用率有什么明显的影响。 所以个人认为cpu占用高跟你多线程是没有直接关系的,还是应该从程序业务入手看看,是不是程序在客户机上运行的时候行为受到环境的影响而与你的电脑上的有差异
风吹腚腚凉 2015-09-09
  • 打赏
  • 举报
回复
引用 8 楼 yuwenge 的回复:
[quote=引用 4 楼 wjfwd2010 的回复:] [quote=引用 2 楼 xuzuning 的回复:] 多线程就是为了提高 cpu 的利用率,90% 显然比 40% 更充分的发挥出 cpu 的性能 如果你所谓线程数不是由操作系统调度的,那么可减小人为开启的数量
我不赞同你的观点,多线程可以提高CPU的利用率,但是多线程并不是为了提高CPU的占用率而设计的 所以多线程就是维了提高CPU的利用率这句话理解有问题。[/quote] 利用率和占用率有毛区别啊?[/quote] 一个意思。 我的意思是说,多线程是可以提高CPU的占用率, 但是多线程本身并不是为这样而设计的,举个例子 而是因为某些逻辑上的问题,不得已需要用到多线程。 以前就一个CPU,一个内核,可是你写socket还是要用到多线程为什么?
卧_槽 2015-09-09
  • 打赏
  • 举报
回复
引用 4 楼 wjfwd2010 的回复:
[quote=引用 2 楼 xuzuning 的回复:] 多线程就是为了提高 cpu 的利用率,90% 显然比 40% 更充分的发挥出 cpu 的性能 如果你所谓线程数不是由操作系统调度的,那么可减小人为开启的数量
我不赞同你的观点,多线程可以提高CPU的利用率,但是多线程并不是为了提高CPU的占用率而设计的 所以多线程就是维了提高CPU的利用率这句话理解有问题。[/quote] 利用率和占用率有毛区别啊?
  • 打赏
  • 举报
回复
嗯是的,多线程的目的是为了提高CPU利用率,同时我们有希望在CPU很低时能并发执行尽可能多的任务。这是一对矛盾,(暂时)解决它时就意味着程序性能提高了。 有时候业务逻辑可能是设计有问题,例如你定时100毫秒执行某任务,而不是基于更科学的事件方式去驱动。那么在不同的机器上,这个“某任务”的执行时间长短是不一样的。甚至同一个机器上,在不同环境下(启动的其它进程的数量大不同)也会造成它时间长短差距很大。那么反过来说,你这个“定时执行任务”的业务逻辑就有着严重的设计问题。 所以要注意使用比较科学合理的并发控制逻辑,只在必要时才触发事件,线程的启动时机要通过系统线程池来管理(而不是自己写 Thread.Start()代码)。特别是在业务逻辑上,尽量避免那些“轮询、阻塞”式的逻辑设计思路。
Poopaye 2015-09-08
  • 打赏
  • 举报
回复
E5-2650八核的啊,你的多线程是不是按核心数来跑的
风吹腚腚凉 2015-09-08
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
多线程就是为了提高 cpu 的利用率,90% 显然比 40% 更充分的发挥出 cpu 的性能 如果你所谓线程数不是由操作系统调度的,那么可减小人为开启的数量
我不赞同你的观点,多线程可以提高CPU的利用率,但是多线程并不是为了提高CPU的占用率而设计的 所以多线程就是维了提高CPU的利用率这句话理解有问题。
_lee_chong 2015-09-08
  • 打赏
  • 举报
回复
那你先调试下性能看,cpu占用在什么代码上再考虑优化呀
xuzuning 2015-09-08
  • 打赏
  • 举报
回复
多线程就是为了提高 cpu 的利用率,90% 显然比 40% 更充分的发挥出 cpu 的性能 如果你所谓线程数不是由操作系统调度的,那么可减小人为开启的数量
wc_ling 2015-09-08
  • 打赏
  • 举报
回复
客户PC没跑程序的时候是多少?
  • 打赏
  • 举报
回复
微软建议是 多线程数量 <=核心数量*2

110,561

社区成员

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

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

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