epoll 性能分析(解決占用CPU 過高問題)2


針對服務器框架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來避免這種情況???


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM