请说下epoll 的使用步骤及原理

Java面试 潘老师 8个月前 (09-05) 158 ℃ (0) 扫码查看

Java面试题:请说下epoll 的使用步骤及原理

得分点:

epoll_create、epoll_ctrl、epoll_wt、红黑树、双向链表、epoll的两种工作模式

标准回答:

epoll 是一种更加高效的 IO 复用技术,epoll 的使用步骤及原理如下:

  1. epoll_create(): 调用此函数会在内核中创建一个 eventpoll 结构体数据,称之为 epoll 对象。在这个结构体中有两个比较重要的数据成员,一个是需要检测的文件描述符的信息 struct_root rbr(红黑树),还有一个是就绪列表 struct list_head rdlist,用于存放检测到数据发送改变的文件描述符信息(双向链表)。
  2. epoll_ctrl(): 调用此函数可以向 epoll 对象中添加、删除、修改要监听的文件描述符及事件。
  3. epoll_wt(): 调用此函数可以让内核去检测就绪的事件,并将就绪的事件放到就绪列表中并返回,通过返回的事件数组进行进一步的事件处理。

epoll 的两种工作模式:

  1. LT 模式(水平触发): LT(Level – Triggered)是缺省的工作方式,同时支持 Block 和 Nonblock Socket。在这种工作方式中,内核检测到一个文件描述符就绪了,然后可以对这个就绪的文件描述符进行 IO 操作。如果不作任何操作,内核仍然会继续通知。
  2. ET 模式(边沿触发): ET(Edge – Triggered)是高效的工作方式,只支持 Nonblock socket。在这种模式下,当文件描述符从未就绪状态变为就绪状态时,内核通过 epoll 检测到。然后它会假设你知道文件描述符已经就绪,不会再为那个文件描述符发送更多的就绪通知,直到你执行某些操作导致该文件描述符不再为就绪状态。但请注意,如果一直不对该文件描述符进行 IO 操作(从而导致它再次变成未就绪状态),内核不会发送更多的通知(仅一次)。ET 模式在很大程度上减少了 epoll 事件被重复触发的次数,因此效率要比 LT 模式高。使用 ET 模式时,必须使用非阻塞套接口,以避免因一个文件描述符的阻塞读/阻塞写操作而阻塞其他文件描述符的任务。

版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/javainterview/8741.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】