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)

相关推荐
朦胧之2 小时前
PostgreSQL 数据库笔记
人工智能·后端
Brilliantwxx3 小时前
【Linux】 进程(10) 进程控制深度解析:创建、终止与等待
linux·运维·服务器·c语言·开发语言·网络
欧米欧4 小时前
Linux基础指令上
linux·运维·服务器
IT_陈寒4 小时前
Redis缓存雪崩把我坑惨了,这次长记性了
前端·人工智能·后端
LucianaiB4 小时前
用 WorkBuddy 研究腾讯、阿里和 DeepSeek,我没敢直接说「AI 很赚钱」
后端
用户8356290780514 小时前
使用 Python 管理 PDF 属性和元数据
后端·python
ARM|X86+FPGA工业主板厂家5 小时前
基于嵌入式 GPU 的智能服务机器人
linux·运维·arm开发·fpga开发·机器人
分支预测失败5 小时前
RISC-V 上下文切换实战:从 Trap 入口到 Linux 进程调度
后端·嵌入式
sulikey5 小时前
Linux 粘滞位(Sticky Bit)完全指南:为什么共享目录需要“防删除“?
linux·服务器
mengge.cloud5 小时前
网络技术基础小白教程
linux·服务器·网络·云计算