Epoller

epoll介绍

  • 高并发服务器一定需要好的IO模型,去缓解IO带来的等待时间。Linux下采用的是epoll多路转接。epoll多路转接在处理海量数据的并发时,效率远高于poll,select。
  • epoll内部采用红黑树管理注册事件,通过回调机制和就绪队列返回就绪事件。
  • epoll模型总共分为3个函数。epoll_create创建epoll模型,返回一个句柄代指你要操作的epoll模型。
  • epoll_ctl,该函数有多种用处。增加,删除,修改事件。
  • epoll_wait,等待事件就绪,该函数会返回一个就绪队列和就绪队列的长度,只需要遍历该就绪队列处理事件即可。epoll保证所有在就绪队列中的事件都已就绪,不必再像poll,select那样轮询检查。
epoll_create();

epoll_ctl();

epoll_wait();

在阅读该项目前,读者应对epoll模型及调用了如指掌。

Epoller

该类非常简单,我们只需要记录epoll模型的句柄,和epoll_wait返回的就绪事件集合即可。

Epoller{
private:
int epollfd_;
std::vector<struct epoll_event> events_;  //存储从epoll_wait返回的事件
};
  • 提供增加,修改和删除事件的函数。
  • 提供等待函数,就是封装了epoll_wait而已。
  • 提供获得对应下标的fd和event的功能。
bool AddFd(int fd, uint32_t events);

bool ModFd(int fd, uint32_t events);

bool DelFd(int fd);

int Wait(int timeoutMS = -1);

int GetEventFd(size_t i) const;

uint32_t GetEvents(size_t i) const;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值