I/O复用(三)---epoll机制

epoll是Linux特有的I/O复用技术,相比select和poll,它通过内核事件表和红黑树实现高效管理。epoll_create创建epoll实例,epoll_ctl用于添加、修改或删除事件,epoll_wait则等待并返回就绪事件。epoll_wait的事件数组仅用于输出,提高了性能。
摘要由CSDN通过智能技术生成

epoll实现机制分析:

epoll是Linux特有的I/O复用函数。它在实现和使用上与select和poll有很大的差异。首先,epoll使用一组函数来完成任务,而不是单个的函数。其次,epoll把用户关心的文件描述符上的事件放在内核的一个时间表中,从而无需像select和epoll那样每次调用都要重复传入文件描述符和集或事件集。但epoll需要使用一个额外的文件描述符,来唯一标识内核中的这个事件表。而这个文件描述符使用epoll_create函数来创建。


size参数现在并不起作用,只是给内核一个提示。告诉它时间表需要多大。该函数返回的文件描述符将用作其他所有epoll系统调用的第一个参数,以指定要访问的内核事件表。

     实质:epoll_create函数的返回值为epfd,每个epfd在内核中有一个对应的eventpoll结构体对象。其中关键的成员是一个就绪队列和一颗红黑树。一个fd被添加到epoll中之后,系统就会为它生成一个对应的epitem结构对象。epitem被添加到eventpoll的红黑树中。红黑树的作用是使用者调用EPOLL_CTL_MOD、EPOLL_CTL_ADD或EPOLL_CTL_DEL的时候可以迅速找到对应的就绪事件。

epoll_ctl:


epfd参数是要操作的文件描述符,op参数则指定操作类型。event参数指定事件,它是epoll_event结构体指针类型。epoll_event的定义如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值