linux sleep(0)与usleep

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. 1.sleep的精度是秒  
  2. 2.usleep的精度是微妙,不精确  
  3. 3.select的精度是微妙,精确  
  4.     struct timeval delay;  
  5.     delay.tv_sec = 0;  
  6.     delay.tv_usec = 20 * 1000; // 20 ms  
  7.     select(0, NULL, NULL, NULL, &delay);  
  8.   
  9. 4.nanosleep的精度是纳秒,不精确  
  10.   
  11. unix、linux系统尽量不要使用usleep和sleep而应该使用nanosleep,使用nanosleep应注意判断返回值和错误代码,否则容易造成cpu占用率100%。

你可能感兴趣的:(linux sleep(0)与usleep)