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