对epoll+多线程的用法和效率的疑问,麻烦高手指点!
各位兄弟,我最近才开始接触epoll,现在正在看我们公司一个老员工的代码。该程序主要有如下几个部分:
1.网络接入层封装成了一个class Poll,负责epoll_create,listen和监听EPOLLIN,EPOLLOUT等事件(ET模式)
2.然后一旦从客户端收到(recv)了数据以后,将其构造成一个消息,放入消息队列中
3.若干工作线程竞争,从消息队列中取出消息并进行处理,然后把处理结果发送(send)给客户端。
我的问题在这里:
1)上面的流程中,工作线程处理完了消息以后是直接使用send来发送结果的,并没有判断这个连接是否处于EPOLLOUT状态,这样会有什么问题吗?
2)如果上述的流程有问题,那么我想到的解决方案就是将处理结果丢给负责网络接入的线程(就是上面第一点说道的那个class对应的线程)。那么因为所有的网络收包和发包都由同一个线程来处理,会不会存在性能问题,甚至影响到新的连接的接入或者其它?
3)如果由同一个线程处理网络方面的收发包存在性能问题,有没有好的办法解决呢?
这个问题我考虑了一天,还是没有考虑清楚,恳请各位高手指点。