libhv icon indicating copy to clipboard operation
libhv copied to clipboard

HttpServer多个loop线程处理同一个listenfd惊群

Open House-Men opened this issue 8 months ago • 3 comments

accept连接频繁的时候这个惊群现象性能影响挺明显的,有什么好的改善方案吗?

House-Men avatar Apr 16 '25 00:04 House-Men

难道说多线程使用的相同的一个fd? 如果将监听端口重用打开,所有线程自己创建一个fd,监听可读事件,操作系统就会帮你尽可能平均分配连接,不会出现惊群现象.

SO_REUSEPORT SO_REUSEPORT 是惊群最好的解决方法,Nginx 在 1.9.1 中加入了这个选项,每个 worker 进程都有自己的 socket,这些 socket 都 bind 同一个端口。当新请求到来时,内核根据四元组信息进行负载均衡,非常高效

xs-411 avatar Apr 16 '25 09:04 xs-411

难道说多线程使用的相同的一个fd? 如果将监听端口重用打开,所有线程自己创建一个fd,监听可读事件,操作系统就会帮你尽可能平均分配连接,不会出现惊群现象.

SO_REUSEPORT SO_REUSEPORT 是惊群最好的解决方法,Nginx 在 1.9.1 中加入了这个选项,每个 worker 进程都有自己的 socket,这些 socket 都 bind 同一个端口。当新请求到来时,内核根据四元组信息进行负载均衡,非常高效

这个方法局限性太大了,Windows完全不支持,Linux也只有多进程模式支持,多线程不支持。

House-Men avatar Apr 16 '25 09:04 House-Men

难道说多线程使用的相同的一个fd? 如果将监听端口重用打开,所有线程自己创建一个fd,监听可读事件,操作系统就会帮你尽可能平均分配连接,不会出现惊群现象. SO_REUSEPORT SO_REUSEPORT 是惊群最好的解决方法,Nginx 在 1.9.1 中加入了这个选项,每个 worker 进程都有自己的 socket,这些 socket 都 bind 同一个端口。当新请求到来时,内核根据四元组信息进行负载均衡,非常高效

这个方法局限性太大了,Windows完全不支持,Linux也只有多进程模式支持,多线程不支持。

好的,我也对这个问题很感兴趣啊,原来多线程不支持啊.

xs-411 avatar Apr 16 '25 10:04 xs-411