Epoll 新增 EPOLLEXCLUSIVE 选项解决了新建连接的’惊群‘问题

Linux内核通过EPOLLEXCLUSIVE选项在epoll中引入了一个补丁,解决了TCP三次握手完成后,多个进程接受连接时的'惊群'现象。该补丁在监听socket的等待队列中使用add_wait_queue_exclusive(),确保只唤醒一个等待进程处理新连接。相关链接提供了更多详细信息。
摘要由CSDN通过智能技术生成

epoll最终和accept一样解决了新建连接的惊群问题 patch地址:
 https://github.com/torvalds/linux/commit/df0108c5da561c66c333bb46bfe3c1fc65905898
patch比较简单, 下面摘录了一部分关键修改~~



在加入listen socket的sk_sleep队列 的唤醒队列里使用了 add_wait_queue_exculsive()函数,  当tcp 收到 
三次握手最后一个 ack 报文时调用sock_def_readable时,只唤醒一个等待源, 从而避免’惊群‘.
调用栈如下:

//  tcp_v4_do_rcv()
//
//  -->tcp_child_process()
//
//  --->sock_def_readable()
//
//  ---->wake_up_interruptible_sync_poll()
//
//  ----->__wake_u
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值