编程CPU的高占有解决方法

在网络编程时通常会使用到死循环来接收数据,因为socket接收是阻塞形式的,所以不会抢夺其余线程的cpu资源。但在我做下列工作时发现,当我不使用阻塞式的死循环时,在线程不满足条件进入死循环(空循环)后会出现cpu大量占用情况,代码如下:


while (1)    //死循环

{

 if (m_frameQueue.size() > 0) //判断条件

{  

              //业务操作

}

//不满足条件会进入无限的空循环中,cpu使用率陡增

}

如果不满足条件可以直接结束线程倒也没有此问题,但很多时候即使不满足判断条件也要继续使用线程循环,实现阻塞的效果。如果一直在空循环中,线程状态会一直处于running,cpu调度时会一直优先给与此线程资源,即便这个线程什么也没有做,所以解决办法是用Sleep进行短时间阻塞释放资源。即添加如下:


Sleep(1);

这样当条件不满足线程变成空循环后,通过Sleep可以有效释放资源,占用率会降到非常低。最终代码:


while (1)    //死循环

{

 if (m_frameQueue.size() > 0) //判断条件

{  

              //业务操作

}

Sleep(1);//不满足条件会进入无限的空循环中,阻塞1毫秒释放资源

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值