epoll 性能分析(解决占用CPU 过高问题)2

针对服务器框架Engine,在工作线程中发现该线程占用CPU过高,分析之后发现问题出在死循环那里

1 void cServerBase::OnProcess()
2 {
3     printf("cServerBase OnProcess
");
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来避免这种情况???

原文地址:https://www.cnblogs.com/Jimmy104/p/5276473.html