epoll的实现原理

本文详细介绍了epoll的实现原理,包括其数据结构(红黑树和队列)、协议栈与epoll的通信机制、线程安全的加锁策略以及ET和LT的工作方式。epoll在处理大量fd时效率优于select/poll,关键在于其高效的数据结构和回调机制。
摘要由CSDN通过智能技术生成

前言

本文以四个方面介绍epoll的实现原理,

1.epoll的数据结构;

2.协议栈如何与epoll通信;

3.epoll线程安全如何加锁;

4.ET与LT的实现。

(epoll实际上在500个以上效率就会比select还有poll高,书上说的是1024.)

epoll的数据结构

两个数据结构红黑树和队列

     我们知道epoll是用来监听fd的,那么其底层的数据结构是怎么样的呢?我们要知道epoll在使用的时候fd主要就分为两个集合,一个是就绪状态fd的集合,一个是所有fd的集合,这两种集合有着不同的数据结构来操控

     让我们想想我们经常使用的微信,平时是聊天的时候多还是不聊天的时候多。聊天的时候就相当于有信息发送给服务器了,这个用户的fd就处于就绪状态需要服务器来进行响应,不发消息手机放着的时候就是空闲状态fd。根据微信我们就能知道,就绪集合的fd是少很多的。

      对于有很多fd的所有fd的集合,我们需要快速的查找并且不造成过多的资源浪费,所以使用的数据结构是红黑树,不仅查找的速度快,而且内存的大小也是可以根据结点的多少来决定。

      &emdp; 那这个就绪集合需要什么数据结构来操作呢?就绪集合的每个fd都需要处理不需要查找,没法确定具体fd的多少所以不能使用数组。那就是链式结构,链式结构分为两种一种是队列,一种是栈。使用的是队列,为什么不用栈呢?你可以想象一下,先是五个客户端有数据需要你处理,你用的是栈的数据结构,先处理了四个之后又来了五个,那就又从栈顶开始处理,栈底的就很晚才处理了。为了公平起见,采用先进先出的队列&#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值