cpu性能以及nanosleep

1.

windows上的sleep最小间隔可以精确到1ms,但是linux上sleep函数需要注意几个地方:

1,usleep(int microseconds)是旧式API,虽然参数是微妙,但是在linux系统上如果间隔低于10毫秒,死循环的CPU占用率仍然很高,如果要用usleep,间隔最小值必须设置为10ms,10000微妙。windows上不存在这种问题,只要sleep的间隔有1ms,死循环CPU占用率很低。

2,kernel 2.0之后才提供了一个新版API:nanosleep(int microseconds),这个API才可以将间隔时间控制在微秒级。

参考

http://tldp.org/HOWTO/IO-Port-Programming-4.html

 

2.

nanosleep的取值限制问题可能导致cpu过高,可参考

https://blog.csdn.net/s_ddwqwd/article/details/82788838

 

3.

ps -eLo pid,lwp,pcpu |grep pid

配合pstack查找性能问题比较方便

 

4.

std sleep_for 和 usleep对比,测试结果:

 1 67 usleep
  2 74 sleep_for
  3 62 usleep
  4 61 sleep_for
  5 60 usleep
  6 60 sleep_for
  7 60 usleep
  8 60 sleep_for
  9 61 usleep
 10 60 sleep_for
 11 62 usleep
 12 60 sleep_for
 13 60 usleep
 14 60 sleep_for
 15 60 usleep
 16 60 sleep_for
 17 60 usleep
 18 61 sleep_for
 19 61 usleep
 20 60 sleep_for

std::this_thread::sleep_for(std::chrono::microseconds(5));

usleep(5);

 25   for (int i = 0; i < 10; i++){
 26 
 27     gettimeofday(&tv,&tz);
 28     int64_t v = tv.tv_sec * 1000000 + tv.tv_usec;
 29 
 30     usleep(5);
 31 
 32     gettimeofday(&tv1,&tz1);
 33     int64_t v1 = tv1.tv_sec * 1000000 + tv1.tv_usec;
 34     cout << v1 - v << " usleep" << endl;
 35 
 36   }

没什么大的差异,cpu占用上,sleep_for线程偏高,高于1-几倍吧,稳定性差,具体原因待分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MyObject-C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值