减少线程或进程的CPU使用率

时间:2012-03-19 23:27:13

标签: c++ c winapi throttling

还有很多这样的问题,但我看到的唯一实质性答案是你使用SetPriorityClass优先考虑其他进程的问题。这不是我想要的。我想显式限制我的线程/进程的CPU使用率。

我该怎么做?

编辑:我无法提高流程本身的效率,因为我无法控制它。我正在将我的代码注入到游戏中,我希望在后台“自动化”。

4 个答案:

答案 0 :(得分:1)

限制进程或线程的cpu使用的最佳解决方案是确保线程或进程使用较少的cpu。

最好通过提高代码效率或减少代码调用来实现。 目的是确保该过程不会持续消耗所有可用的时间片。

要尝试的事情:

  1. 找出实际占用所有CPU的内容。优化繁重的加工区域 - 理想情况是改变算法。
  2. 尽可能减少轮询。
  3. 尝试依靠操作系统在必要时唤醒您的进程的能力。例如。通过等待文件/套接字/ fifos / mutexes /信号量/消息队列等
  4. 让进程自我调节处理器的使用。如果你的进程在无限循环中做了很多工作,那么在每N个循环之后插入一个sched_yield()或sleep()。如果没有其他进程等待CPU使用,那么您的进程几乎会立即重新调度,但会允许系统的其余部分在必要时使用cpu时间。
  5. 重新安排处理,以便在进程处于空闲状态时运行优先级较低的活动。
  6. 仔细调整线程或进程优先级。但请注意,正如@Mooing Duck所说,通过这样做,您可以将CPU使用率从一个地方转移到另一个地方而不会看到整体改进。

答案 1 :(得分:0)

如何定期发出睡眠命令?

答案 2 :(得分:0)

你的问题很广泛 - 我不知道它在做什么。您当然可以跟踪线程的I / O并在通过某个阈值后强制它放弃cpu。

答案 3 :(得分:0)

我最终枚举了一个线程列表,然后有一个100ms的计时器,它在每五次迭代中有两次暂停线程列表(理论上这会减少40%的CPU使用率)。

感谢所有答案。