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

Reducing the CPU usage of a thread or process

本文关键字:CPU 使用量 进程 线程      更新时间:2023-10-16

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

我该怎么做?

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

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

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

尝试的东西:

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

定期发出睡眠命令怎么样?

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

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

谢谢你的回答。