我是靠谱客的博主 迷人花生,这篇文章主要介绍linux不靠谱的sleep,linux不靠谱的sleep,现在分享给大家,希望可以做个参考。

首先感谢如下两篇的blog,让我走出了很大的一个误区:

http://www.cppblog.com/kongque/archive/2011/01/18/138765.aspx

http://blog.csdn.net/zjwoody/article/details/7882240

在我的一个项目中,因为需要与串口通信,每次读写都需要延时usleep(1000)=1ms,但是通信量非常大,每一次工作这样的通信大概有300次左右,这样算下耗时应该是300ms左右。

但是通过strace打印出系统函数调用发现实际接近900ms,仔细观察strace日志才发现,每次usleep(1000000)其实都延时了2ms,之后上网搜索才发现usleep是不精确的。

1.sleep的精度是秒

2.usleep的精度是微妙,不精确

3.select的精度是微妙,精确

struct timeval delay;

delay.tv_sec = 0;

delay.tv_usec = 20 * 1000; // 20 ms

select(0, NULL, NULL, NULL, &delay);

4.nanosleep的精度是纳秒,不精确

unix、linux系统尽量不要使用usleep和sleep而应该使用nanosleep,使用nanosleep应注意判断返回值和错误代码,否则容易造成cpu占用率100%。

这是第一篇blog中提到的,然后第二篇blog中提供的测试代码,本人做了少量改动(原作者没有打印出usleep(0)时的信息),代码如下:

/*

最后

以上就是迷人花生最近收集整理的关于linux不靠谱的sleep,linux不靠谱的sleep的全部内容,更多相关linux不靠谱内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部