HttpServer多个loop线程处理同一个listenfd惊群
accept连接频繁的时候这个惊群现象性能影响挺明显的,有什么好的改善方案吗?
难道说多线程使用的相同的一个fd? 如果将监听端口重用打开,所有线程自己创建一个fd,监听可读事件,操作系统就会帮你尽可能平均分配连接,不会出现惊群现象.
SO_REUSEPORT SO_REUSEPORT 是惊群最好的解决方法,Nginx 在 1.9.1 中加入了这个选项,每个 worker 进程都有自己的 socket,这些 socket 都 bind 同一个端口。当新请求到来时,内核根据四元组信息进行负载均衡,非常高效
难道说多线程使用的相同的一个fd? 如果将监听端口重用打开,所有线程自己创建一个fd,监听可读事件,操作系统就会帮你尽可能平均分配连接,不会出现惊群现象.
SO_REUSEPORT SO_REUSEPORT 是惊群最好的解决方法,Nginx 在 1.9.1 中加入了这个选项,每个 worker 进程都有自己的 socket,这些 socket 都 bind 同一个端口。当新请求到来时,内核根据四元组信息进行负载均衡,非常高效
这个方法局限性太大了,Windows完全不支持,Linux也只有多进程模式支持,多线程不支持。
难道说多线程使用的相同的一个fd? 如果将监听端口重用打开,所有线程自己创建一个fd,监听可读事件,操作系统就会帮你尽可能平均分配连接,不会出现惊群现象. SO_REUSEPORT SO_REUSEPORT 是惊群最好的解决方法,Nginx 在 1.9.1 中加入了这个选项,每个 worker 进程都有自己的 socket,这些 socket 都 bind 同一个端口。当新请求到来时,内核根据四元组信息进行负载均衡,非常高效
这个方法局限性太大了,Windows完全不支持,Linux也只有多进程模式支持,多线程不支持。
好的,我也对这个问题很感兴趣啊,原来多线程不支持啊.