【发布时间】:2022-01-04 15:58:09
【问题描述】:
我有一个while循环如下:
while(true){
//do stuff
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
当我查看 CPU 使用率时,它几乎是 100% ... 有没有任何方法可以在保留 CPU 周期的同时执行类似的操作,而无需使用复杂的条件变量?
编辑:“do stuff”检查队列以查看是否有要发送的事件...如果没有,则它什么也不做(超快),否则它通过 HTTP 发送事件。很少有活动(例如每 10 分钟一次)。
我知道你可以重写它以使用条件变量,但我更想弄清楚为什么会有这么多的 CPU 使用率。
【问题讨论】:
-
“做事”到底是什么? CPU 是否有可能忙于做这些“事情”,即它运行的时间远远超过 100 毫秒?
-
速度非常快。即使我将睡眠时间设置为 1 或 2 秒,我仍然会获得 99% 的 CPU 使用率。
-
条件变量并不复杂。这个问题暗示代码是多线程的,这意味着已经解决了同步问题,这是使用条件变量最复杂的部分。
-
这里没有足够的信息来确定 CPU 使用率高的原因。原因很可能隐藏在
//do stuff的细节中。 -
当 CPU 使用率如此之高时,您是否使用分析器查看实际执行的内容?有没有可能完全在另一个线程中?
标签: c++ multithreading thread-synchronization