在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