epoll源码走读

epoll源码分析与走读

首先我们需要知道epoll有三个方法:epoll_create,epoll_ctl,epoll_wait;

1:epoll_create

这个方法是在创建内核事件表,在内核空间创建一个红黑树。

对于linux文件,他有一个文件表,里面有不同的元素,每当我们打开一个文件就会创建一个struct file文件,里面还有一个inode(本身的属性信息),通过此找到在磁盘上的文件;

对于epoll源码来说他是通过ep_getfd方法来对这三个参数进行改变和关联的

根据上述过程我们得到下图的结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UenYc60g-1661875995152)(LIUX.assets/image-20220830224123334.png)]

2:epoll_ctl

首先我们需要知道他的参数,我们将获取的fd传进去,实际上增删是对其的红黑树进行操作,然后我们是根据fd找到struct file,再根据private_data进行找到内核事件表,再到红黑树里面找就如上图的结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WjRs5Rk5-1661875995153)(LIUX.assets/image-20220830232750964.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TFRxvuUu-1661875995154)(LIUX.assets/image-20220831001227544.png)]

3:epoll_wait

他所做的事情就是从就绪队列中获取描述符,拷贝到用户空间,所需要做的是就是这个事情

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hIMYl765-1661927547427)(LIUX.assets/image-20220831142734876.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CpvLRQAK-1661927547428)(LIUX.assets/image-20220831142751821.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p3zUCujJ-1661927547430)(LIUX.assets/image-20220831143135633.png)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值