epoll 接口以及原理说明

我与影子孤独终老i 提交于 2020-02-27 07:09:01

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

主要接口

int epoll_create(int size)

创建 epoll 对象,同时创建一个空的红黑树以及空的双向链表,返回 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 以及其事件的信息。
  • 双向链表的功能是保存就绪的 socke 以及其事件的信息。

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

 

(SAW:Game Over!)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!