我正在考虑基于epoll
编写tcp服务器。
为了实现最佳性能,我也希望实现多核支持。但在我的研究中出现了以下问题:
调用两个epoll_wait()
是否更快 - 来自两个不同线程的调用,每个线程在双核上观察自己的文件描述符?或者这只是调用一个epoll_wait()
来观察所有文件描述符?
由于内核会观察文件描述符,我认为在调用epoll_wait()
的用户空间中使用多少线程并不重要?
答案 0 :(得分:0)
我怀疑你提到的两种情况下epoll本身的表现没有区别是正确的。有什么可能有所不同,OTOH,是通过在每个线程中有一个事件循环,你不需要上下文切换到一个单独的工作线程来处理连接。这是例如nginx的工作原理,参见例如http://www.aosabook.org/en/nginx.html。