您的位置 首页 java

Java-彻底弄懂netty-程序员不得不理清的epoll详解-知识铺

知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停的来唤醒你记忆深处的知识点。

一、解决问题

1.1.解决select 文件句柄 数量限制

1.2.解决select及 poll 遗留的等待队列在用户态和内核态切换带来的资源浪费情况。

1.3 解决select及poll遗留的需要遍历整个等待队列中的所有 socket 激活事件问题。

二、相关函数

2.1 epoll _create

当天一个socket连接上来,基于epoll模式的 多路复用 模型,会主动创建一个epoll对象与之对应,同时把该对象添加到事件表中。既创建了红黑树储存对象ID和就绪list 链表

2.2 epoll_ctl

监控上面的epoll事件表,如果有socket可读可写就绪,则自动把该socket对应的对象,添加到就绪列表中。则检查在红黑树中是否存在,如果存在立即返回,不存在就插入到红黑树种。

2.3 epoll_wait

监控上面的就绪列表,这种模式无需poll和select模式下面必须遍历的情况。立刻返回准备绪链表即可。

2.4 close

epoll 对象使用完毕需要关闭,释放资源。

三、稍微了解下c/c++实战 伪代码

四、工作模式

socket就绪状态,如何通知,这里涉及到两种模式。

4.1 LT模式

LT(Level Triggered),水平模式触发,该模式同时指出阻塞socket和非阻塞socket。主动通知socket是否就绪状态,即使不需要,也会来通知。

4.2 ET模式 ( netty 默认)

ET(Edge Triggered),边缘模式触发,只有当未就绪模式切换到就绪模式,会通知一次。需要注意点:这种模式下,有可能只读取了部分数据,因为后续的得不到通知。需要开发人员正确处理好socket的读和写,要一直调用读写,直到碰到结束退出。

文章来源:智云一二三科技

文章标题:Java-彻底弄懂netty-程序员不得不理清的epoll详解-知识铺

文章地址:https://www.zhihuclub.com/200956.shtml

关于作者: 智云科技

热门文章

网站地图