为什么 this_thread::sleep_for 不减少 while 循环的 CPU 使用

Why does this_thread::sleep_for not reduce CPU usage of while loop

我有一个 while 循环如下:

while(true){
    //do stuff
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
}

当我查看 CPU 使用率时,它几乎是 100% ... 是否有 任何 方法在保留 CPU 的同时做这样的事情循环而不必使用复杂的条件变量?

编辑:“do stuff”检查队列以查看是否有任何事件要发送...如果有 none,则它什么都不做(超快),否则它会通过以下方式发送事件HTTP。很少有活动(例如每 10 分钟一次)。

我知道您可以重写它以使用条件变量,但我更愿意弄清楚为什么有这么多 CPU 用法。

因此循环不是消耗 CPU 的东西。使用探查器查看哪个线程实际上很忙。 100% CPU 使用率意味着所有核心都在忙碌。在多核 CPU 上,一个繁忙的线程本身永远不会消耗 100% CPU。

我找到了原因:在代码逻辑(“// do stuff”)中有一个 continue 语句。 continue 语句导致线程跳过 sleep 语句,导致它不断循环。我将 thread_sleep 移动到 while 循环的顶部,CPU 使用率从 99% 变为 0.1%