线程中执行sleep(1),在各个CPU平台上面运行有差异。有的CPU占用高,有的CPU占用低,跪求大佬指点一二

everything_at_once 2018-05-08 12:05:09
情况是这样,同样的代码,
线程中加Sleep(1)后,在老版E5(运行正常),新版E5(CPU占用低,但是线程执行效率慢了很多,由于是接收组播数据,数据量会变少,感觉执行效率变低)
不加Sleep(1),在老版E5(CPU占用高),新版E5(运行正常)
而另外一台测试机器,AMD的老版本CPU,加不加都正常。
各位有遇到过这个问题么?还请指点一二
...全文
1135 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
everything_at_once 2018-06-14
  • 打赏
  • 举报
回复
经测试,实际代码分为两个线程 1,socket接收,将收到的数据push进队列,这个过程不需要sleep 2,接受到的数据写入本地文件,这个过程从队列中取出数据,再写入到文件

//该写法会导致部分服务器写入的媒体数据不全
while(1)
{
    if(队列不为空)
        执行写入
    sleep(1);
}

//经测试,该写法正常,CPU占用也低,不会有数据漏写的情况
while(1)
{
    while(队列不为空)
        执行写入
    sleep(1);
}
还有其他的方式,和第二种写法类似,计算运行时间,达到一定时间再运行sleep,这样就不会导致线程执行效率低,导致数据写入不完整,而由于每隔一定时间会执行sleep,也不回导致CPU占用过高。
schlafenhamster 2018-05-08
  • 打赏
  • 举报
回复
与操作系统 线程 调度 有关,Sleep(0)(放弃当前剩余运行时间) 试试
赵4老师 2018-05-08
  • 打赏
  • 举报
回复
提醒:Windows计时精度≈15毫秒。
白色一大坨 2018-05-08
  • 打赏
  • 举报
回复
只能说之前在win7下用vc6遇到过类似问题,是一个接受线程里面,循环获取数据,中间如果不加sleep进行一下停顿就会出现卡死状况

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧