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)

相关推荐
埃伊蟹黄面1 分钟前
ELF深入解剖:从文件头到动态段,图解库的二进制构成
linux·c·
勇哥java实战分享19 分钟前
短信平台 Pro 版本 ,比开源版本更强大
后端
学历真的很重要23 分钟前
LangChain V1.0 Context Engineering(上下文工程)详细指南
人工智能·后端·学习·语言模型·面试·职场和发展·langchain
计算机毕设VX:Fegn089526 分钟前
计算机毕业设计|基于springboot + vue二手家电管理系统(源码+数据库+文档)
vue.js·spring boot·后端·课程设计
五仁火烧29 分钟前
生产环境中配置了接口3000后,不能启动,改成8080后就可以
linux·网络·安全·vue
JiMoKuangXiangQu36 分钟前
Linux build:头文件安装
linux·headers_install
上进小菜猪42 分钟前
基于 YOLOv8 的智能杂草检测识别实战 [目标检测完整源码]
后端
lbb 小魔仙1 小时前
【Linux】云原生运维效率提升:Linux 终端工具链(kubectl + tmux + fzf)组合拳教程
linux·运维·云原生
码农小韩1 小时前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
Joren的学习记录1 小时前
【Linux运维大神系列】Kubernetes详解3(kubeadm部署k8s1.23高可用集群)
linux·运维·kubernetes