Epoll 新增 EPOLLEXCLUSIVE 选项解决了新建连接的’惊群‘问题
2016-01-25 08:09
363 查看
epoll最终和accept一样解决了新建连接的惊群问题 patch地址:
https://github.com/torvalds/linux/commit/df0108c5da561c66c333bb46bfe3c1fc65905898
patch比较简单, 下面摘录了一部分关键修改~~
在加入listen socket的sk_sleep队列 的唤醒队列里使用了 add_wait_queue_exculsive()函数, 当tcp 收到
三次握手最后一个 ack 报文时调用sock_def_readable时,只唤醒一个等待源, 从而避免’惊群‘.
调用栈如下:
相关链接:
https://github.com/torvalds/linux/commit/df0108c5da561c66c333bb46bfe3c1fc65905898
https://lwn.net/Articles/667087/
http://netdev.vger.kernel.narkive.com/RWScCeSc/patch-net-next-epoll-add-epollexclusive-support
https://lwn.net/Articles/632590/
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_up_sync_key()
相关链接:
https://github.com/torvalds/linux/commit/df0108c5da561c66c333bb46bfe3c1fc65905898
https://lwn.net/Articles/667087/
http://netdev.vger.kernel.narkive.com/RWScCeSc/patch-net-next-epoll-add-epollexclusive-support
https://lwn.net/Articles/632590/
相关文章推荐
- grep 命令系列:如何在 Linux/UNIX 中使用 grep 命令
- Nginx 工作进程运行示意图
- Thrift 的TNonblockingServer运行原理分析
- Leetcode 39 - Combination Sum
- 数制转化(栈的应用)
- OSChina 周一乱弹 —— 深圳下冰雹了
- 【SCOI2012】喵星球上的点名
- 当你选择编程语言时你在选择什么
- Wireshark系列之7 利用WinHex还原文件
- Wireshark系列之7 利用WinHex还原文件
- MVC3实现多个按钮提交
- Java 线程
- 44. Wildcard Matching leetcode Python 2016 new season
- Leetcode 38 - Count and Say
- 每个程序员都应读的30本书
- 软件开发管理:管开发如治军
- 软件开发管理 : 开源葵花宝典
- Leetcode Stack总结
- Leetcode HashTable 题型总结
- Leetcode 204. Count Primes