IO多路复用模型——epoll

本文深入探讨了IO多路复用模型的工作原理,对比了select、poll和epoll的不同之处,特别是epoll如何通过事件触发模式解决轮询瓶颈,提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、IO多路复用模型是阻塞IO,阻塞部分是select函数而不是socket,IO多路复用模型是可以监听多个socket连接, IO多路复用模型目的不是单个连接有多快,而是需要连接大量的请求。

2、epoll的ET 需要保证socket是non block socket

 

 

首先介绍一个select 和 poll 模型吧 

select : 所有的socket连接都注册到一个select,然后启动一个线程去遍历这个select,当发现有socket进入就绪状态,然后就会去执行这个socket里面的读写,处理完就返回,然后接着遍历。(轮训模式)

缺点:

1、文件描述符使用数组存,会出现数量的限制,1024个。

2、每次调用select都要去初始化一次描述符。重复初始化。将fd从用户态拷贝到内核态,每次调用select后,都需要将fd从内核态拷贝到用户态;

3、轮训排查方式太慢,效率低

poll:和select差不多 都是轮训的方式,但是有一点不一样,fd的存储使用链表,fd个数不受限制了,然后每次初始化fd之后就不用再次初始化,

缺点:轮训方式太慢

epoll: 采用事件触发模式,epoll采用只返回状态发生变化的文件描述符,便解决了轮寻的瓶颈。使用红黑树存储fd,有两种模式。

LT 水平触发模式 

EL 边缘触发模式 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值