前面学习了select、poll和epoll三组IO复用系统调用,现在从向内核传递文件描述符数、内核实现、检索就绪描述符方式、工作模式和时间复杂度等五个方面比较其中的区别,以明确在实际应用中应该选择使用哪个。
由于select与poll的特性相似,所以把它们联系在一起与epoll进行比较。
epoll有利于解决描述符数目很多的情况。
1. 向内核传递描述符数
select / poll 每轮循环都要重新拷贝到内核空间
epoll 每个描述符只拷贝一次到内核空间
2. 内核实现
select / poll 内核轮询检查描述符上是否有事件
epoll 在描述符上设置回调函数,有数据就绪调用回调函数添加到就绪队列
3. IO函数返回后检索就绪描述符
select / poll 遍历所有描述符找到就绪的描述符
epoll 直接返回就绪的描述符,不需要遍历所有描述符
4. 工作模式
select / poll LT模式(普通模式)
epoll ET模式(高效模式)
5.时间复杂度
select / poll O ( N)
epoll O(1)