select、poll和epoll的区别 ET模式

本文详细对比了select、poll和epoll三种I/O多路复用技术的原理和特性。select受限于最大描述符数目,poll解决了这一限制但效率不高;epoll采用事件驱动,具有更高的效率,尤其在连接数多而活动连接少的场景下优势明显。文章还介绍了epoll的两种工作模式:LT模式和ET模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

区别
select :用途是在一定时间内,监听用户感兴趣的文件描述符上的可读、可写、和异常的事件。在32位系统默认情况下,select最多监听1024个描述符。

poll :本质上和select没有太大区别,poll是基于链表来存储的,因此没有最大连接数的限制。

select和poll每次调用都需要给内核拷贝描述符和事件;select和poll返回后,每次都需要遍历所有描述符找到就绪的描述符,时间复杂度就为O(n);select和poll 内核中以轮询的方式检测就绪描述符。

epoll : 在内核中创建事件表,每个描述符只需要添加一次;返回后直接提供就绪描述符;内核中以注册回调函数的方式完成,时间复杂度为O(1)。
epoll使用一组函数来完成任务,而不是单个函数。
epoll系列系统调用的主要接口是epoll_wait函数,epoll_wait无须轮询整个文件描述符集合来检测哪些事件已经就绪,但当活动连接的比较多时,其效率也未必比select和poll高,因为此时回调函数被触发得过于频繁。
epoll_wait适用于连接数量多,但活动连接较少得情况。
epoll支持ET高效模式。

LT模式和ET模式
  LT模式:内核如果检测到就绪事件并将其通知给应用程序后,应用程序可以不立即处理该事件,因为在下一次调用epoll_wait时,还会将此事件通知给应用程序。
  ET模式:内核如果检测到就绪事件并将其通知给应用程序后,应用程序必须立即处理该事件,否则在下一次调用epoll_wait时,不会将此事件通知给应用程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值