我的程序使用预定数量的线程,每个线程都执行独立工作。 我使用i7-2600 CPU,但我关闭了超线程模块,因此它在4个内核上运行4个线程。 当我使用1个线程运行程序时,CPU使用率为25%,这是完美的,因为1个线程被完全使用,但是当我运行4或3个线程时,我只获得60%的CPU,为什么?
就像我之前提到的那样,线程是完全独立的(没有锁定也没有争用)当我用1个线程运行程序4次时,我获得了100%的CPU使用率(即当每个进程的4个进程为1个线程时)我得到适当的CPU使用率)
有什么想法吗?
更多信息:
答案 0 :(得分:3)
您可以尝试将程序从工作站转移到服务器垃圾回收模式。目前,您可以只使用一个垃圾收集线程
设置说明here
有关解释/更多详细信息,请参阅此thread
更改后不要指望100%的CPU负载,但是你会接近100%并增加它的速度。
答案 1 :(得分:1)
concurrency visualizer会帮助你。您将看到每个线程何时执行,如果所有线程都没有执行,您可以确切地看到特定线程正在等待的原因。如果生成大量垃圾,GC可能会阻止线程导致线性缩放。但你只能通过真正的调查找到答案。
答案 2 :(得分:1)
我在使用.NET Framework v2.0时遇到了同样的问题,然后我将项目目标框架更改为以100%CPU负载启动的v4.0
编辑:您可以使用
查看每个线程的CPU使用情况或