epoll 接口以及原理说明

零、实例代码https://github.com/xuchanglong/NtyTCP-v1.0.0-comments

一、主要接口

int epoll_create(int size);

 创建 epoll 对象,创建一颗空的红黑树,一个空双向链表。

int epoll_ctl(int epid, int op, int sockid, struct epoll_event *event);

向 epoll 对象里面的红黑树中增加、删除、修改指定的节点。

int epoll_wait(int epid, struct epoll_event *events, int maxevents, int timeout);

 等待双向链表中是否有节点,若有节点则取得不大于 maxevents 数量的节点并放入 events 中,最后返回。

int epoll_event_callback(struct eventpoll *ep, int sockid, uint32_t event)

显卡驱动调用,判断当前事件(建立连接、断开连接、读写数据)对应的 socket 是否已经在红黑树中挂号,如果是,则将新的事件保存到对应的红黑树节点中并更新到双向链表中。 

二、原理说明

1、上文在说明函数功能时提到了两个 epoll 核心结构:红黑树双向链表

  • 红黑树的功能是保存待监控的 socket 以及其事件的信息。
  • 双向链表的功能是保存就绪的 socket 以及其事件的信息。

2、eventpoll 和 红黑树、双向链表的关系图如下所示:

 

(SAW:Game Over!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值