多路复用IO模型——POLL_EPOLL

📅 发布时间:2026/7/15 20:45:56 👁️ 浏览次数:
多路复用IO模型——POLL_EPOLL
在了解其他的多路复用IO接口的区别1.selectselect接口的优缺点select监听的文件描述符集合是一个数组存在存储上限select监听的文件描述符集合在应用层当事件发生时会发生一次内核层向应用层的数据拷贝会产生资源开销select只能工作在水平触发模式select必须将所有的文件描述符集合中的元素找一遍才能找到产生事件的文件描述符2.pollpoll接口的优缺点poll监听的事件集合在用户态的链表中没有上限的限制poll监听的文件描述符集合在应用层当事件发生时会发生一次内核层向应用层的数据拷贝会产生资源开销poll只能工作在水平触发模式poll必须将所有的文件描述符集合中的元素找一遍才能找到产生事件的文件描述符3.epollepoll的优缺点没有文件描述符存储上限限制epoll在内核中创建了一张监听的事件表事件表在内核中不需要与应用层进行交互效率较高epoll可以工作在水平触发低速工作状态与边沿触发高速工作状态epoll可将发生io事件的文件描述符返回不需要手动检测所有文件描述符是否有IO事件发生函数接口:POLL:poll;原型int poll(struct pollfd *fds,nfds_t nfds,int timeout)功能监听集合中的文件描述符是否有IO事件发生参数fds监听Io事件集合的数组首地址nfds事件数组的元素个数timeout超时时间为-1时程序一直阻塞等待返回值成功时返回产生时事件的个数失败时返回-1时间到达没有事件发生返回0EPOLL1.epoll_create:原型int epoll_create(int size)功能创建一张在内核中用于监听发生IO事件的事件表参数size事件表的事件个数返回值成功返回事件表文件描述符失败返回-12.epoll_ctl原型int epoll_ctl(int epfdint op,structe epoll_event *event,int maxevent,int timeout)功能向内核事件表中添加修改删除事件参数epfd内核事件表文件描述符opEPOLL_CTL_ADD 添加事件EPOLL_CTL_MOD 修改事件EPOLL_CTL_DEL 删除事件fd操作的文件描述符event事件集合返回值成功返回0失败返回-1epoll_wait原型int epoll_wait(int epfds,struct epoll_event *event,int maxlen,int timeout)功能参数event存放产生事件空间的首地址maxevent数组的大小timeout超时时间返回值成功返回事件的文件描述符个数失败返回-1超过时间没有事件发生返回0