多线程CPU占用率过高的问题

wenhong609 2013-04-08 11:45:05
创建了两个线程,两个线程中都有while(1)循环来判断select是否满足条件,因为无限循环语句,CPU的占用率一直都很高。有没有说明方法可以降低CPU的占用率!!?!
...全文
1211 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-04-11
  • 打赏
  • 举报
回复
while里面要么调用阻塞函数,要么调用linux下usleep(微秒);或Windows下Sleep(毫秒);
那个谁谁谁 2013-04-11
  • 打赏
  • 举报
回复
发动机在空转。 解决办法是:在whil循环徨里面加一个Sleep(1).......甚至是Sleep(0)“把执行权”交出去也会好些
wenhong609 2013-04-11
  • 打赏
  • 举报
回复
引用 10 楼 aaronjzhang_ 的回复:
不用select呗,windows下就用iocp,linux下就用epoll
iocp还在摸索阶段!
aaronjzhang_ 2013-04-11
  • 打赏
  • 举报
回复
不用select呗,windows下就用iocp,linux下就用epoll
wenhong609 2013-04-11
  • 打赏
  • 举报
回复
引用 7 楼 zilaishuichina 的回复:
C/C++ code?1234567891011while(1){ if( select... ) { // } else { Sleep(0); }}
这个感觉不错!!
小黑小宝 2013-04-10
  • 打赏
  • 举报
回复
select 里面的时间设置不是也一样在睡觉??
zilaishuichina 2013-04-10
  • 打赏
  • 举报
回复

while(1)
{
    if( select... )
    {
        // 
    }
    else
    {
        Sleep(0);
    }
}
JonyDeng 2013-04-10
  • 打赏
  • 举报
回复
线程要sleep() 可以主线程一直检查,然后根据检测结果分别触发其他线程
wenhong609 2013-04-08
  • 打赏
  • 举报
回复
引用 3 楼 qq120848369 的回复:
是select还是mysql_query的select?
呵,WinSocket中的select!!
prohibit 2013-04-08
  • 打赏
  • 举报
回复
可以试试多线程条件变量同步,主线程select判断,触发条件则唤醒其他两线程,其他两个线程只做事不循环(有事做则先做,其余时间pthread_cond_wait()等待主线程唤醒),当然,根据你的应用场景来定
qq120848369 2013-04-08
  • 打赏
  • 举报
回复
是select还是mysql_query的select?
benlypan 2013-04-08
  • 打赏
  • 举报
回复
while里sleep();
Athenacle_ 2013-04-08
  • 打赏
  • 举报
回复
可以设个定时器,隔一段时间(如半秒)查询一次,其余时间sleep。 或者一直sleep,直到select满足条件唤醒sleep着的线程

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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