TCP_DEFER_ACCEPT和SO_REUSEPORT

1、使用TCP_DEFER_ACCEPT时,内核并不马上把已经建立成功的TCP连接通过accept()返回对应的fd。而是当TCP连接上有数据接收到后,再通过accept()返回fd。这样的好处是,可以立即使用recv接收一次数据,减少了一次epoll_wait()等待,适当提升一点点性能;

2、在linux3.9及以上的版本,linux内核支持SO_REUSEPORT。这样多个socket可以绑定同一个端口。普通的网络服务程序使用accept()获取不同的TCP/udp连接的FD。其使用方法一是使用一个线程负责accept()接收连接并分发给不同的工作线程。这样到导致线程切换,影响其性能。方法二是每个工作线程均accept(),会出现惊群问题,需要采用锁来解决accept()资源的问题,其性能影响是锁。支持SO_REUSEPORT后,上面两个方法的性能损耗可以得到解决,内核根据当前TCP连接的源目的IP和端口(4-TUPLE)进行HASH计算,从而选择不同的socket。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值