epoll accept 惊群

本文介绍 Linux 中 epoll 新增的 EPOLLEXCLUSIVE 选项如何解决新建连接的‘惊群’问题。通过使用 add_wait_queue_exclusive 函数,在监听套接字的 sk_sleep 队列中只唤醒一个等待源,有效避免了因多个进程同时被唤醒而产生的资源浪费。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


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



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

[cpp]  view plain  copy
  1. //  tcp_v4_do_rcv()  
  2. //  
  3. //  -->tcp_child_process()  
  4. //  
  5. //  --->sock_def_readable()  
  6. //  
  7. //  ---->wake_up_interruptible_sync_poll()  
  8. //  
  9. //  ----->__wake_up_sync_key()  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值