Redhat 6上的CPU利用率

时间:2013-06-19 07:47:54

标签: c linux

我在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%的利用率。 使用usleep的人总是占1.5%到2%。我维护的服务器遍布很多。 有关为什么usleep对redhat 6更敏感的解释? 在redhat 5上我看不出任何差异。 顺便说一下,我在redhat 6上看到CPU更敏感。围绕这个问题的任何已知问题?

2 个答案:

答案 0 :(得分:0)

usleep参数是几百万秒,而不是千分之一。微与毫米。

再添加三个零,我认为你会看到你的期望。

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

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

答案 1 :(得分:0)

sleep将其参数视为,而usleep将其参数视为微秒

提一下,

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。但是,This question可能会为您提供一些信息。