免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4465 | 回复: 6
打印 上一主题 下一主题

[C++] nanosleep导致cpu过高怎么处理?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-09-04 17:45 |只看该作者 |倒序浏览
创建若干线程:
  while(1)
{
             fd_set()
             select()  //由于超时时间设置为0,会直接返回
              proc()

nanosleep(&t, NULL)     //t == 100us

}
top 已经到700多了
Tasks: 404 total,   1 running, 403 sleeping,   0 stopped,   0 zombie
Cpu0  : 41.1%us, 32.1%sy,  0.0%ni, 21.5%id,  4.1%wa,  0.0%hi,  1.1%si,  0.0%st
Cpu1  : 35.8%us, 28.6%sy,  0.0%ni, 25.2%id,  3.2%wa,  0.0%hi,  7.2%si,  0.0%st
Cpu2  : 36.0%us, 27.4%sy,  0.0%ni, 32.0%id,  4.3%wa,  0.0%hi,  0.4%si,  0.0%st
Cpu3  : 36.7%us, 25.7%sy,  0.0%ni, 33.6%id,  3.6%wa,  0.0%hi,  0.4%si,  0.0%st
Cpu4  : 40.3%us, 30.2%sy,  0.0%ni, 25.1%id,  3.2%wa,  0.0%hi,  1.1%si,  0.0%st
Cpu5  : 36.6%us, 27.8%sy,  0.0%ni, 31.1%id,  2.4%wa,  0.0%hi,  2.2%si,  0.0%st
Cpu6  : 34.4%us, 23.5%sy,  0.0%ni, 32.8%id,  2.2%wa,  0.0%hi,  7.1%si,  0.0%st
Cpu7  : 35.2%us, 24.9%sy,  0.0%ni, 36.7%id,  2.9%wa,  0.0%hi,  0.4%si,  0.0%st
Mem:  32873536k total, 30442736k used,  2430800k free,   120744k buffers
Swap:  8191992k total,    14336k used,  8177656k free, 27738484k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                        
13436 root      20   0 1444m 264m 1944 S 753.3  0.8  67:20.94 thr

gdb大部分停在
Thread 0x7fa565afd710 (LWP 13449)  0x0000003f2820eced in nanosleep () from /lib64/libpthread.so.0

怎么可以使cpu降下去?谢谢

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2014-09-04 20:11 |只看该作者
时间搞长一点啊。

BTW:为什么不在select中等待,偏要sleep?

论坛徽章:
0
3 [报告]
发表于 2014-09-05 09:15 |只看该作者
select 的特点是,有事件立即执行,没事件等到超时。所以你在这里多等一会不影响。为什么要0呢。

论坛徽章:
0
4 [报告]
发表于 2014-09-05 09:28 |只看该作者
现在跑的来看,select每次都会有信号,睡太长会影响业务.


   

论坛徽章:
0
5 [报告]
发表于 2014-09-05 12:40 |只看该作者
你把select,一般是用来接收网络数据吧,和业务处理放在两个线程里。
比如你收到数据,放到缓冲,继续收。
业务线程就不停处理。这时select随便设置一个数值就行。
因为你每次都有信息,就没必要再sleep了

论坛徽章:
0
6 [报告]
发表于 2014-09-05 13:06 |只看该作者
谢谢大家,这个问题基本定位了。

论坛徽章:
1
2015小元宵徽章
日期:2015-03-06 15:57:20
7 [报告]
发表于 2014-09-10 15:13 |只看该作者
本帖最后由 快乐的土豆 于 2014-09-11 12:49 编辑

具体什么原因?

我觉得即使是cpu过高,也是select造成的而不是sleep. nanosleep()是降cpu的吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP