select模型,poll模型,epoll模型对比
select poll epoll
支持最大连接数 1024 无上限 无上限
IO效率 每次调用都要进行遍历,时间复杂度O(n) 每次调用都要进行遍历,时间复杂度O(n) 使用事件通知方式,每当fd就绪,系统注册的回调函数就会被调用,将就绪fd放到rdllist里面,这样epoll_wait返回的时候我们就拿到了就绪的fd,时间复杂度O(1)
fd拷贝 每次select都拷贝,fd数组 每次poll都拷贝fd数组 调用epoll_ctl时拷贝进内核并由内核保存,之后每次epoll_wait不拷贝
本篇主要分析epoll边缘触发,通过模拟各种场景,来介绍EPOLLOUT,不涉及epoll底层源码实现。
一、序
epoll_wait返回的条件
1、等待时间到期
2、发生信号事件,例如ctrl+c
3、The associated file is available for read(2) operations,如果注册了EPOLLIN, socket接收缓冲区,有新的数据到来
4、The associated file is available for write(2) operations,如果注册了EPOLLOUT