epoll模型

epoll 模型

  • 工作原理 epoll 是 Linux 内核为处理大批量文件描述符而作了改进的 I/O 多路复用技术,它使用事件驱动的方式,当有文件描述符就绪时,内核会直接通知应用程序。epoll 通过三个系统调用 epoll_createepoll_ctlepoll_wait 来完成文件描述符的管理和事件的监听。
  • 函数原型
#include <sys/epoll.h>

// 创建一个 epoll 实例,返回一个文件描述符
int epoll_create(int size);

// 对 epoll 实例进行控制,如添加、修改或删除要监视的文件描述符及其事件
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

// 等待 epoll 实例上的事件发生
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
  • 优缺点

    • 优点

      • 高效epoll 使用内核事件表来管理文件描述符,避免了 selectpoll 每次调用时的大量数据复制操作,提高了性能。
      • 事件驱动epoll 采用事件驱动机制,当有事件发生时,内核会直接将发生事件的文件描述符通知给应用程序,无需像 selectpoll 那样遍历所有文件描述符,大大提高了处理效率。
      • 支持边缘触发(ET)和水平触发(LT)模式:边缘触发模式下,只有在文件描述符的状态发生变化时才会通知应用程序,减少了不必要的通知次数;水平触发模式则与 selectpoll 的行为类似。
    • 缺点epoll 是 Linux 特有的 I/O 多路复用技术,不具备跨平台性。

三种模型对比总结

模型文件描述符数量限制数据复制开销事件遍历效率跨平台性
select有(通常为 1024)每次调用都需复制低(需遍历所有描述符)
poll每次调用都需复制低(需遍历所有描述符)较好
epoll少量复制(只需添加或删除描述符时)高(直接返回就绪描述符)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值