一图总结epoll的总体工作流程

大家好,前面一篇文章我们介绍了epoll的几个重点内容,详情可查看:关于epoll的四件“小事”
今天我们就来用一张图片总结下epoll的总体流程,更加直观的帮助各位同学理解epoll内部的实现原理。
在这里插入图片描述
其中软中断回调的时候回调函数也整理⼀下:
sock_def_readable: sock 对象初始化时设置的
=> ep_poll_callback : epoll_ctl 时添加到 socket 上的
=> default_wake_function: epoll_wait 是设置到 epoll上的

总结下,epoll 相关的函数⾥内核运⾏环境分两部分:

  • ⽤户进程内核态。进⾏调⽤ epoll_wait 等函数时会将进程陷⼊内核态来执⾏。这部分代码负责查看接收队列,以及负责把当前进程阻塞掉,让出 CPU。
  • 硬软中断上下⽂。在这些组件中,将包从⽹卡接收过来进⾏处理,然后放到 socket 的接收队列。对于 epoll 来说,再找到 socket 关联的 epitem,并把它添加到 epoll 对象的就绪链表中。 这个时候再捎带检查⼀下 epoll 上是否有被阻塞的进程,如果有唤醒之。

但其实在实践中,只要活⼉⾜够的多,epoll_wait 根本都不会让进程阻塞。⽤户进程会⼀直⼲活,⼀直⼲活,直到 epoll_wait ⾥实在没活⼉可⼲的时候才主动让出 CPU。这就是 epoll⾼效的地⽅所在!

[推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,点击立即学习:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值