我在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更敏感。围绕这个问题的任何已知问题?
答案 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可能会为您提供一些信息。