2013-06-19 108 views
0

我在RedHat 6下面的代码片段:CPU利用率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我们= 1毫秒 在RedHat 6的一个睡眠取0 %利用率始终。 有睡眠者一直占1.5%至2%。我有很多这些服务器都在维护中。 任何解释为什么usleep在redhat 6上对CPU更敏感? 在红帽5我看到没有区别。 顺便说一下,我看到在redhat 6上CPU的灵敏度要高得多。任何已知的问题呢?

+0

'usleep'将参数设置为**微秒**而不是毫秒。 1000000微秒等于1秒。所以叫'usleep(1000000)' – VoidPointer

+0

请阅读我的评论下面的答案1. 1000 us = 1 ms –

+0

@issac请在下面阅读我的答案。 – VoidPointer

回答

0

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

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

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

的usleep()函式功能挂起调用线程的执行对(至少)微秒微秒

+0

1000微秒恰好等于1毫秒,因此上面等待的时间完全相同。在C中睡眠(不像bash)等待几毫秒,所以1000我们正好是1ms,所以上面应该等待完全相同的时间 –

+0

否...... C中的'sleep()'在几秒钟内接受一个参数。它的工作方式与壳内置完全相同。 – duskwuff

0

sleep接受其参数为usleep接受其参数为微秒

提,

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

手段,不像你预计,usleep(1000)不会有类似的等待时间为sleep(1)

usleep(1000)版本将循环比sleep(1)版本更频繁导致更多CPU使用率。可以使用sleep(1)usleep(10000000)

我没有足够的信息比较redhat 5和6,或执行usleep。然而,This question可能会给你一些信息。