selelct 、poll 、epoll 对比

以下内容均为本人学习笔记,若有不当,欢迎指出

在前面学习了解的 select 、 polll 、epoll 编程模型
select 】 【 poll
抱歉,差两个链接

表1 对比selelct 、poll、epoll

IO模型 select poll epoll
fd数量
支持的文件描述符数量 受限于fd_set大小 取决于用户分配pollfd结构体数组的大小 取决于用户分配epoll_event结构体数组的大小
拷贝开销
传参时拷贝开销 每次都需要将fd集合从用户态拷贝到内核态 每次都需要将pollfd结构体从用户态拷贝到内核态 调用epoll_wait时需要将就绪事件从内核拷贝到用户态
遍历 不要
是否需要遍历文件描述符集合来获取就绪文件描述符 内核监听时和用户准备读写时都需要遍历fd集合来获取文件描述符 内核监听时和用户准备读写时都需要遍历pollfd结构体数组来获取文件描述符 因为返回的epoll_event结构体数组中都是就绪的事件,不用全部遍历一边,只遍历有效个
接口 复杂不明确 明确 方便明确
调用的接口是否明确简单 1.因为fd_set既做输入参数又输出参数,每次会破坏输入参数,需要自己维护一个第三方变量保存输入参数
2.参数太多
pollfd结构里面有events(输入的集合) 和revents(输出的集合) 1.将其拆分为3个接口
2.事先告诉内核要监听哪些文件及什么类型的事件
3.epoll_wait以O(1)时间复杂度监视文件描述符

完。

猜你喜欢

转载自blog.csdn.net/misszhoudandan/article/details/81174664