我正在运行一个提供服务的C++程序,并注意到即使在不处理任何请求的情况下,它也会占用std::sleep_for
%的CPU.我将问题范围缩小到一个While循环,该循环调用std::sleep_for
以防止服务退出.
为了进行测试,我编译并运行了以下简单的测试程序:
#include <chrono>
#include <thread>
int main(int argc, char * argv[])
{
std::this_thread::sleep_for(std::chrono::hours::max());
}
我的期望是,这将睡眠很长一段时间,事实上,当我在我的M1 Mac上try 它时,我看到了预期的行为. 然而,当我在Redhat Linux 8机器上运行它时,它立即返回. 我还在Mac上运行的Rocky Linux 8 Docker容器上try 了它,这也立即返回. 这证实了这通常发生在RHEL 8系统上-或者至少在gcc 8.5.0上,因为编译器版本在两个Linux系统上是相同的(Mac上的编译器是Apple提供的clang).
这就解释了为什么我的服务占用了100%的CPU,因为它是在While循环中调用它的.但我从来没有听说过这种行为.还有其他人吗?
当然,我睡std::chrono::seconds(1)
个小时可以很容易地解决这个问题.我问这个问题只是出于对知识的好奇.