linux网络编程(十)IO函数select、poll、epoll等区别

可以用以下表格对比来看select, poll, epoll的区别:
 
select
poll
epoll
操作方式
遍历
遍历
回调
底层实现
数组
链表
红黑树
IO效率
每次调用都进行线性遍历,时间复杂度为O(n)
每次调用都进行线性遍历,时间复杂度为O(n)
事件通知方式,每当fd就绪,系统注册的回调函数就会被调用,将就绪fd放到readyList里面,时间复杂度O(1)
最大连接数
1024(x86)或2048(x64)
无上限
无上限
fd拷贝
每次调用select,都需要把fd集合从用户态拷贝到内核态
每次调用poll,都需要把fd集合从用户态拷贝到内核态
调用epoll_ctl时拷贝进内核并保存,之后每次epoll_wait不拷贝
epoll是Linux目前大规模网络并发程序开发的首选模型。在绝大多数情况下性能远超select和poll。目前流行的高性能web服务器Nginx正式依赖于epoll提供的高效服务。但是,在并发连接不高的情况下,多线程+阻塞I/O方式可能性能更好。
 
 

 

 

posted @ 2020-07-14 18:05  chenjy2019  阅读(87)  评论(0)    收藏  举报