Fil*_*tos 8 multithreading epoll
我正在考虑编写一个基于的TCP服务器epoll.为了实现最佳性能,我也希望实现多核支持.但是在我的研究过程中出现了以下问题:epoll_wait()从两个不同的线程调用两个-Call 是否更快,每个线程在双核上观察自己的文件描述符?或者这是否只调用一个epoll_wait()观察所有文件描述符的单个?
由于内核观察文件描述符,我认为在用户空间调用中使用多少线程并不重要epoll_wait()?
cme*_*erw 13
您甚至可以在同一个epoll_fd的多个线程上同时调用epoll_wait,只要您使用边缘触发(EPOLLET)模式(并注意同步).与单线程epoll事件循环相比,使用该方法可以在多核计算机上获得真正的性能优势.
我前段时间实际上已经完成了性能测量,请参阅我的博客文章结果:
我怀疑你是对的,epoll 本身的性能在你提到的两种情况下没有什么不同。OTOH,可能会有所不同的是,通过在每个线程中都有一个事件循环,您不需要上下文切换到单独的工作线程来处理连接。例如,这就是 nginx 的工作原理,请参见http://www.aosabook.org/en/nginx.html。