sleep(0)是让出CPU
http://blog.csdn.net/lengzijian/article/details/9092367
在我的一个项目中,因为需要与串口通信,每次读写都需要延时usleep(1000)=1ms,但是通信量非常大,每一次工作这样的通信大概有300次左右,这样算下耗时应该是300ms左右。
但是通过strace打印出系统函数调用发现实际接近900ms,仔细观察strace日志才发现,每次usleep(1000000)其实都延时了2ms,之后上网搜索才发现usleep是不精确的。
[cpp] view
plain copy
print?
-
1.sleep的精度是秒
-
2.usleep的精度是微妙,不精确
-
3.select的精度是微妙,精确
-
struct timeval delay;
-
delay.tv_sec = 0;
-
delay.tv_usec = 20 * 1000;
-
select(0, NULL, NULL, NULL, &delay);
-
-
4.nanosleep的精度是纳秒,不精确
-
-
unix、linux系统尽量不要使用usleep和sleep而应该使用nanosleep,使用nanosleep应注意判断返回值和错误代码,否则容易造成cpu占用率100%。