概述
简单说:相比于select实现的多路复用I/O模型,epoll模型最大的好处在于它不会随着被监控描述符数目的增长而导致效率的急速下降。
具体说:select模型是采用遍历扫描来判断每个描述符是否有事件发生。当监控的描述符数目越多,自然耗时就越大。而且由于受系统默认限制,select只能同时监控1024个描述符。相反,epoll模型没有这些缺点,epoll基于poll模型的,不受描述符个数限制(但是受进程可打开文件描述符个数的限制,不过一般都很大)。其次,epoll对事件的响应是触发方式的,也即无需对整个要监控的描述符列表做遍历扫描,而只需对有事件发生的描述符做处理即可。
select在每次被调用前都要重新设置文件描述符集合,因为事件发生之后,文件描述符集合会被内核修改;而epoll则不会被修改。
epoll模型的两种触发方式:水平触发和边缘触发
LT水平触发同时支持block和 no block I/O。在这种模式下,当描述符从未就绪变为就绪时,内核通过epoll告诉进程该描述符有事件发生,之后如果进程一直不对这个就绪状态做出任何操作的话,则内核就会持续通知,直到事件处理完成。
ET边缘触发是高速工作方式,只支持no block I/O。当描述符从未就绪变为就绪时,内核通过epoll告诉进程该描述符有事件发生。之后如果进程一直不对这个就绪状态做出任何操作,内核也不会再发送对于该描述符就绪的通知。
最后
以上就是优秀项链为你收集整理的I/O多路复用:select 和epoll区别的简单介绍的全部内容,希望文章能够帮你解决I/O多路复用:select 和epoll区别的简单介绍所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复