針對服務器框架Engine,在工作線程中發現該線程占用CPU過高,分析之后發現問題出在死循環那里
1 void cServerBase::OnProcess() 2 { 3 printf("cServerBase OnProcess\n"); 4 while(m_bRuning) 5 { 6 onMsg(); 7 cTimerMgr::Inst().process_timer(); 8 } 9 }
在這個線程里面出現的死循環,所以導致CPU過高。
而在網絡線程里面,因為有執行
int nEventNum = epoll_wait(m_nEpId, arrEvents, default_epoll_size, 1);
這個會有一毫秒的阻塞,所以不會出現最小時間粒度的死循環。
那么問題來了,
void cServerBase::OnProcess()
{
}
cServerBase不需要處理IO 事件,那怎么樣避免最小時間粒度的死循環呢?難道要引入一個epoll來避免這種情況???
