在SO上还有一些类似的问题,但没有一个具有满意的/相关的答案。故意限制只有一个线程的CPU使用率
我有一个单线程的C++程序,做一些事情基本上是这样的:
while(true) {
//do things which are cpu bound
}
的问题是,当我运行这个程序,它通常是我的整个计算机上唯一的过程,正在做积极的工作。
没有别的安排,操作系统很自然地安排了这个程序,我的CPU使用率通过屋顶,我不想要。当然,我的粉丝也开始呼呼,这特别烦人。
我打击这个的方式是在循环内添加sleep(100)
(这在我的正确性方面很好),但是它的工作原理让我很烦恼,它不是技术上正确的解决方案。
这是因为如果我想睡一个非常准确的时间量,并且我的计算机上有很多其他进程正在运行,这将不是一个好的解决方案,因为sleep
不准确,它也不允许其他进程使用CPU,而我的程序仍在计划中 - 但这不是我真正的问题。
什么是正确的解决方案,以降低CPU的使用,而无需使用sleep
,假设这是正在运行的唯一的方案?
通常,如果一个进程是可执行的,OS将执行它。故事结局。如果你不想让你的程序运行,就睡吧。另外,谁告诉你睡眠进程阻止其他进程执行?谁告诉你这完全错了。 –
我想你应该调用'std :: this_thread :: yield()',这会优先考虑其他进程。这可能会减少CPU使用率 – Rakete1111
@SamVarshavchik,你是对的。忙于等待一秒钟。 – noobcoder