如何理解epoll原理

技术如何理解epoll原理这篇文章将为大家详细讲解有关如何理解epoll原理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。epoll的系统调用很简单,只有三个,其定义如下

这篇文章会详细讲解如何理解epoll的原理,文章内容质量较高,所以边肖会分享给大家参考,希望大家看完这篇文章有所了解。

Epoll的系统调用很简单,只有三个,定义如下:

int epoll _ create(int size);

int epoll_ctl(int epfd,int op,int fd,struct epoll _ event * event);

int epoll_wait(int epfd,struct epoll_event *events,int maxevents,int time out);

00-1010首先,需要调用epoll_create来创建一个epoll文件描述符,内核会同时创建一个eventpoll的数据结构。这个数据结构将包含两个东西,一个是红黑树,专门用来存储epoll_ctl注册的fd文件描述符;另一个是就绪链表,用于存储那些准备好并与epoll_wait调用相关的fd文件描述符。

struct eventpoll{

红黑树的struct rb_root rbr;//The根节点存储了添加到epoll中需要监控的所有事件。

struct list_head rdlist;//double链表存储符合条件的事件,并将通过epoll_wait返回给用户。

};

如何理解epoll原理

因为其次,epoll中的所有事件都与网卡驱动程序有回调关系,当相应的事件发生时,这些事件将通过这个回调函数被添加到就绪链表

最后,调用epoll_wait来检查是否有任何事件时,它只需要检查eventpoll对象中的rdlist双链表中是否有任何要处理的事件。如果rdlist不为空,事件将被复制到用户状态,事件数量将返回给用户。

一,epoll的实现原理就是基于这三个函数来实现的,具体步骤如下:

1、epoll_create

调用epoll_create方法创建一个epoll的句柄,它将占用一个fd,用完需要回收。

2、epoll_ctl

epoll的事件注册功能,通过epoll_ctl注册需要监控的事件类型。

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

Epfd:由epoll _ create创建的epollfd。

事件:指示操作类型。三种类型,如下所示:

1) EPOLL_CTL_ADD:在epfd中注册一个新的FD;

2) EPOLL_CTL_MOD:修改注册fd的监听事件;

3) EPOLL_CTL_DEL:从epfd中删除一个fd。

Fd:要监控的fd。

事件:告诉内核它需要监听哪些事件。(EPOLLIN:表示对应的文件描述符可读(包括对端套接字);EPOLLOUT:表示可以写入相应的文件描述符;EPOLLPRI:表示相应的文件描述符具有可读的紧急数据(带外数据);EPOLLERR:表示相应的文件描述符有错误;EPOLLHUP:表示对应的文件描述符被挂起;EPOLLET:将EPOLL设置为边缘触发,这是相对于级别触发的。EPOLLONESHOT:只听一次这个事件。听完这个事件,如果需要继续听这个套接字,需要再次调用epoll_ctl)

3、epoll_wait

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

功能:收集了epoll监控的事件中已经发生的事件。

参数:

Events:是一个分配的epoll_event结构的数组,epoll会将事件分配给events数组(事件不能是空指针,内核只负责将数据分配给这个事件数组,不会帮助我们在用户模式下分配内存)。

Maxevents:告诉内核事件数组有多大。maxevents的值不能大于创建epoll_create时的大小。

超时:是以毫秒为单位的超时。

如果成功调用返回值:函数,则返回相应IO上的已准备好的文件描述符数目,如果返回0,则指示超时。

如何理解epoll原理,希望在此分享。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/104212.html

(0)

相关推荐

  • 我的学习旅程

    技术我的学习旅程 我的学习旅程学习JAVA最基础也是最难的在学习的开始期间也总是怀疑自己没有动手能力,是否能够坚持下去,但不断对自己说这是我的兴趣爱好,我要慢慢;慢慢地走
    学习思路 每次在学习新地知识点

    礼包 2021年12月23日
  • 手机不显示4g网络是怎么回事,手机没有4g网是怎么回事

    技术手机不显示4g网络是怎么回事,手机没有4g网是怎么回事若手机没有4G信号手机不显示4g网络是怎么回事,建议按照以下操作方法排查: 1、需要使用的是4G手机,且使用相应制式的4G电话卡;
    2、重新插拔SIM卡尝试,条件

    生活 2021年10月30日
  • 将文件压缩成PNG图像存储方法是什么

    技术将文件压缩成PNG图像存储方法是什么本篇内容介绍了“将文件压缩成PNG图像存储方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅

    攻略 2021年11月18日
  • 怎么分析Div+CSS网站设计的优点

    技术怎么分析Div+CSS网站设计的优点这期内容当中小编将会给大家带来有关怎么分析Div+CSS网站设计的优点,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Div+CSS网站设计的优点

    攻略 2021年11月11日
  • 汇编语言如何实现发出各种声音

    技术汇编语言如何实现发出各种声音这篇文章主要介绍“汇编语言如何实现发出各种声音”,在日常操作中,相信很多人在汇编语言如何实现发出各种声音问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”汇编语

    攻略 2021年11月29日
  • vue3组件通信(vue3子组件之间如何通信)

    技术vue3组件通信的几种方式分别是这样的vue3组件通信的几种方式分别是这样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。vue3组件通信方式为以下几种

    攻略 2021年12月14日