0

我在 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;
}

自 1000 us = 1 ms 以来,它应该以完全相同的 maount 睡眠在 redhat 6 上,具有睡眠的那个一直占用 0% 的利用率。有睡眠的人一直在 1.5% 到 2% 之间。我在维护的服务器上有很多这样的东西。关于为什么 usleep 在 redhat 6 上对 cpu 更敏感的任何解释?在 redhat 5 上,我没有看到任何差异。顺便说一句,我看到在 redhat 6 上 CPU 更加敏感。有什么已知的问题吗?

4

2 回答 2

0

usleep 参数是 MILLIONTHS 秒,而不是千分之一。微与毫。

再加三个零,我想你会看到你所期望的。

http://linux.die.net/man/3/usleep

usleep() 函数将调用线程的执行暂停(至少)usec 微秒

于 2013-06-19T07:55:48.053 回答
0

sleep将其参数作为secondsusleep将其参数作为microseconds

值得一提的是,

1 second = 1000 milli-second
1 milli-second = 1000 micro-second

意味着,与您预期的不同,usleep( 1000 )不会有与sleep( 1 ).

usleep( 1000 )版本将比sleep( 1 )版本更频繁地循环导致更多的 CPU 使用。

要获得接近 1 秒的类似等待时间,请使用sleep( 1 )usleep( 10000000 )

我没有足够的信息来比较redhat 5和6,或者usleep的实现。然而,这个问题可能会给你一些信息。

于 2013-06-20T14:29:17.387 回答