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)

相关推荐
ByteX1 分钟前
springboot 项目某个接口响应特别慢排查
java·spring boot·后端
神秘奇男子1 分钟前
openEuler 25.09 企业级 MySQL主从复制部署与性能优化实战提升50%
linux·mysql
哈哈哈笑什么11 分钟前
全面拆解离线→同步的10大核心问题【落地的完整方案(思路+架构+代码)】
后端
Java水解14 分钟前
[Spring] Spring配置文件
后端·spring
稳住别浪15 分钟前
DRF框架认证底层源码解析——简单易理解!
后端
马卡巴卡18 分钟前
SpringBoot项目使用Redis对用户IP进行接口限流
后端
VX:Fegn089521 分钟前
计算机毕业设计|基于springboot + vue酒店预约系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
moringlightyn23 分钟前
进程控制(程序替换+自定义Shell)
linux·服务器·c++·笔记·c·shell·进程
汤姆yu23 分钟前
基于springboot的校园家教信息系统
java·spring boot·后端·校园家教
q***062925 分钟前
Spring Boot--@PathVariable、@RequestParam、@RequestBody
java·spring boot·后端