select poll epoll 的区别

博客对比了select、poll与epoll的性能。select和poll每次循环需从用户空间向内核传数据,在内核以轮询方式检测,返回后需遍历所有描述符;epoll直接在内核创建事件表,注册回调函数,返回后可直接得到就绪描述符。还介绍了epoll的LT和ET触发模式的区别及ET模式要求。

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

1、select poll 每次循环都需要从用户空间向内核中传递数据

     epoll 直接在内核空间创建 事件表,每个描述符仅需要传递一次

2、select  poll 在内核中以轮询的方式检测有就绪事件的描述符O(n)

     epoll 在每个描述符上注册回调函数,事件就绪后,执行回调函数将描述符添加到就绪队列了O(1)

3、select poll 返回后,需要遍历所有文件描述符,才能找到就绪的,O(n)

      epoll 返回后,直接得到就绪描述符,不需要遍历所有描述符O(1)

https://blog.youkuaiyun.com/davidsguo008/article/details/73556811

https://www.cnblogs.com/zhaodahai/p/6831456.html

epoll有EPOLLLT和EPOLLET两种触发模式,LT是默认的模式,ET是“高速”模式。LT模式下,只要这个fd还有数据可读,每次 epoll_wait都会返回它的事件,提醒用户程序去操作,而在ET(边缘触发)模式中,它只会提示一次,直到下次再有数据流入之前都不会再提示了,无 论fd中是否还有数据可读。所以在ET模式下,read一个fd的时候一定要把它的buffer读光,也就是说一直读到read的返回值小于请求值,或者 遇到EAGAIN错误。还有一个特点是,epoll使用“事件”的就绪通知方式,通过epoll_ctl注册fd,一旦该fd就绪,内核就会采用类似callback的回调机制来激活该fd,epoll_wait便可以收到通知。

epoll    LT   ET区别?

LT模式:描述符事件就绪后,如果用户没有处理完数据,epoll会继续提醒,直到处理完。

ET模式(高校模式):描述符上时间就绪后,无论用户有没有处理完数据,epoll都只提醒一次。

ET模式下,描述符必须使用非阻塞模式。

Fcntl()可以设置非阻塞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值