epoll实现细节——源码解析


我对于网络协议比较有兴趣,同时最近也有一些面试候选人希望从事服务器偏底层的工作,所以关于IO复用技术以及实现细节就成了考点,虽然我(斗胆)问了epoll是如何实现这么一个问题,但是汗颜的是我也没有看过源码,只是看过一些网络资料而已,本着做技术要务实的态度,这两天抽空看了看3.4的源码,总结一下epoll的实现,如有任何错误之处欢迎大家指正。


本文不讨论epoll相对于其它IO复用技术的优势,也不讨论preactor以及reactor的概念。


  • 等待队列

epoll实现中大量使用了linux等待队列,等待队列有很多用途,可用于中断处理、休眠等待。进程可以在某些资源上进行等待,并由资源管理程序在适当的时候唤醒。

epoll中使用等待队列的方式主要有两类:

一类是epoll_wait调用时,如果没有就绪事件,则当前进程将自己block在一个等待队列上(eventpoll->wq)

另一类是将target fd加入target file的等待队列上,等待就绪事件的回调

本文不详细介绍等待队列的细节,以上知识足够理解epoll的实现思路

  • epoll实现

epoll暴露给用户的接口一共三个epoll_create, epoll_wait, epoll_ctl


首先是epoll_create,epoll_create1会调用ep_alloc,其中比较关键的是init两个wait_queue


init_waitqueue_head(&ep->wq);

init_waitqueue_he

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值