select、poll、epoll对比
select、poll、epoll是Linux系统I/O多路复用的实现机制手段,通过前面的TCP编程,对三者做一个对比总结表。
select | poll | epoll | |
---|---|---|---|
时间复杂度 | O(n) | O(n) | O(1) |
监听文件描述(fd)符数目 | 有限(默认1024) | 理论上无限 | 理论上无限 |
监听方式 | 轮询fd集合 | 轮询fd集合 | 通过事件表 |
触发方式 | LT | LT | LT & ET |
特点 | 每次调用,都需把fd集合从用户态拷贝到内核态,且需要遍历所有fd集合 | 每次调用,都需要遍历所有fd集合 | 事件触发,无需遍历所有fd集合 |
适用场合 | 少量fd监听,且fd十分活跃 | 少量fd监听,且fd十分活跃 | 大量fd监听,或者fd活跃程度不高,如服务器端 |
例程代码
【1】select
https://blog.csdn.net/qq_20553613/article/details/100026164
【2】poll
https://blog.csdn.net/qq_20553613/article/details/100047078
【3】epoll
https://blog.csdn.net/qq_20553613/article/details/100067052
参考
【1】https://blog.csdn.net/lsgqjh/article/details/65629609
【2】https://www.cnblogs.com/aspirant/p/9166944.html
【3】https://blog.csdn.net/zgege/article/details/81632990