Linux事件驱动IO中select vs epoll

背景

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

触发条件

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

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

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

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

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

对文件描述符的处理

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

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

 

原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/11495161.html