几个Threads上的epoll_wait更快?

Fil*_*tos 8 multithreading epoll

我正在考虑编写一个基于的TCP服务器epoll.为了实现最佳性能,我也希望实现多核支持.但是在我的研究过程中出现了以下问题:epoll_wait()从两个不同的线程调用两个-Call 是否更快,每个线程在双核上观察自己的文件描述符?或者这是否只调用一个epoll_wait()观察所有文件描述符的单个?

由于内核观察文件描述符,我认为在用户空间调用中使用多少线程并不重要epoll_wait()

cme*_*erw 13

您甚至可以在同一个epoll_fd的多个线程上同时调用epoll_wait,只要您使用边缘触发(EPOLLET)模式(并注意同步).与单线程epoll事件循环相比,使用该方法可以在多核计算机上获得真正的性能优势.

我前段时间实际上已经完成了性能测量,请参阅我的博客文章结果:

  • 因为如果您以任何其他模式工作,则epoll会将相同的文件描述符报告给多个线程,从而导致虚假的唤醒。 (2认同)

jan*_*neb 0

我怀疑你是对的,epoll 本身的性能在你提到的两种情况下没有什么不同。OTOH,可能会有所不同的是,通过在每个线程中都有一个事件循环,您不需要上下文切换到单独的工作线程来处理连接。例如,这就是 nginx 的工作原理,请参见http://www.aosabook.org/en/nginx.html