针对服务器框架Engine,在工作线程中发现该线程占用CPU过高,分析之后发现问题出在死循环那里
void cServerBase::OnProcess()
{
printf("cServerBase OnProcess\n");
while(m_bRuning)
{
onMsg();
cTimerMgr::Inst().process_timer();
}
}
在这个线程里面出现的死循环,所以导致CPU过高。
而在网络线程里面,因为有执行
int nEventNum = epoll_wait(m_nEpId, arrEvents, default_epoll_size, 1);
这个会有一毫秒的阻塞,所以不会出现最小时间粒度的死循环。
那么问题来了,
void cServerBase::OnProcess()
{
}
cServerBase不需要处理IO 事件,那怎么样避免最小时间粒度的死循环呢?难道要引入一个epoll来避免这种情况???