NIO提供了selector的epoll实现,为什么Netty还要实现自己的Epoll版本呢?

这其实是Stackoverflow上的一个问题。Netty的核心开发者Norman Maurer给出了答案:

Netty的epoll transport使用了边缘触发,而java的NIO库使用了水平触发。而且Netty的epoll transport支持了java nio没有支持的配置选项,例如TCP_CORK、SO_REUSEPORT等等。

epoll的边缘触发(Edge Triggered,ET)和水平触发(Level Triggered,LT)

对于水平触发LT来说,会持续通知直到事件处理完毕。而边缘触发ET只会通知一次,不管事件是否处理完毕。

epoll_wait的相关工作流程:

  • 当内核监控的fd产生用户关注的事件,内核将fd(epi)节点信息添加进就绪队列。
  • 内核发现就绪队列有数据,唤醒进程工作。
  • 内核先将fd从就绪队列删除。
  • 然后将fd对应就绪事件信息从内核空间拷贝到工作空间。
  • 事件数据拷贝完成之后,内核检查事件模式是lt还是et。如果不是et,重新将fd信息添加回就绪队列,下次重新触发epoll_wait。

参考

nio - Why native epoll support is introduced in Netty? - Stack Overflow

如何理解Epoll中的LT和ET模式,底层实现又是怎么样的? - 知乎 (zhihu.com)

相关推荐
爱上咖啡香22 分钟前
我给 Laravel AI 写了个千问驱动,文本、语音、图像、视频全打通
后端
杨文说AI与数字化29 分钟前
票种表重构复盘:把填数字改成规则可执行版本
后端
回家路上绕了弯1 小时前
什么是 Agent as a Service?把 AI Agent 变成可调用的服务
后端
金銀銅鐵2 小时前
一个 Java 文件实现《孫子兵法·始計篇》中英对照阅读器
java·后端·ai编程
测试界的小码农2 小时前
【Linux 命令实战(03):文件创建、复制、移动与删除,掌握 touch、mkdir、cp、mv、rm】
linux·服务器·php
byte轻骑兵2 小时前
实战 1:修改 BlueZ 源码,添加自定义开机日志
linux·aiot·bluez·电脑蓝牙·嵌入式蓝牙
叼烟扛炮3 小时前
Linux 学习笔记(五十):网络层——IP 协议、子网划分与 NAT 魔法
linux·笔记·学习
叼烟扛炮3 小时前
Linux 学习笔记(六十):单线程的逆袭——epoll 高并发服务器实战
linux·服务器·网络·笔记·学习·算法
用户360055579003 小时前
Kestrel_VLLM - 34 · 批量 M 行:五个块、两种层型,与「退回去」的两个原语
后端
AR-26710-3 小时前
Linux Day32——实操五类资源告急排查
linux·运维