我在 redhat 6 上执行了以下代码片段:
#include <unistd.h>
int main(int argc, char *argv[])
{
while(true)
{
#ifdef SLEEP
sleep(1);
#endif
#ifdef USLEEP
usleep(1000);
#endif
}
return 0;
}
它应该休眠完全相同的maount,因为1000 us = 1 ms 在 redhat 6 上,具有 sleep 功能的设备始终占用 0% 的利用率。 sleep 的人一直在 1.5% 到 2% 之间。我维护的服务器上有很多这样的东西。 有什么解释为什么 usleep 在 redhat 6 上对 cpu 更敏感吗? 在 redhat 5 上我看不出有什么区别。 顺便说一句,我发现在 redhat 6 上,CPU 更加敏感。有任何已知问题吗?
最佳答案
usleep 参数是百万秒,而不是千分之一。微与毫。
再加三个零,我想您会看到您所期望的。
http://linux.die.net/man/3/usleep
usleep() 函数将调用线程的执行挂起(至少)usec 微秒
关于Redhat 6 上的 CPU 利用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17185661/