Linux事件驱动IO中select vs epoll

匿名 (未验证) 提交于 2019-12-02 21:56:30

背景

select 和epoll的背景不同,select是POSIX标准,代码移植性好,epoll是Linux标准,代码可移植性只在Linux操作系统之间。

触发条件

select只支持条件触发(level-triggered),epoll支持条件触发和边缘触发。

  条件触发(level-triggered):当条件满足时,发生一个I/O事件。

  边缘触发(edge-triggered):当状态改变时,发生一个I/O事件。

条件触发对编码代码的要求低,不容易丢事件,在大流量,高并发的环境下,效率不好,只要有数据没有处理,内核不断的通知你。

边缘触发,代码编写复杂,需要防止丢失事件,容易发生事件丢失的情况。

对文件描述符的处理

select最大支持1024个文件描述符,选择描述符时,遍历所有的描述符才能获取到哪些描述符有事件通知,效率低。

epoll对于描述符事件的选择不是遍历,是事件响应的,描述符上事件来就马上选择出来,不需要遍历整个句柄链表,因此效率非常高。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!