我是靠谱客的博主 迷人花生,最近开发中收集的这篇文章主要介绍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不靠谱的sleep,linux不靠谱的sleep所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部