epoll为什么快

新开了公众号,欢迎关注
在这里插入图片描述

epoll

epoll是linux下的一种I/O多路复用的操作方式,是event poll的意思

I/O多路复用,举个栗子,在酒吧,一个服务员,10个顾客在喝酒,服务员有这么几种服务方式

服务员从第一个顾客开始问,你要酒吗,再问第二个,你要酒吗,依次问下去,问完一圈,再从头开始,服务员就是不停的在BBB,要酒吗,要酒吗,这种服务方式就叫做轮询(poll)

后来,服务员生气了,累了,就告诉顾客,你们谁要酒就喊一声啊,我给你们倒,这样,再没有人要喝酒的时候,服务员就闲着了,可以干点别的事,擦擦桌子啊,整理一下酒柜啊,但是,这里有个问题,就是在有人叫酒的时候,服务员不知道是谁叫的,还得从头开始问,一直问到需要就得那个顾客,开始服务,这对应到I/O方式就是select

再后来,服务员想了一个办法,给每位顾客一个号牌,谁想喝酒了,就喊一声,把号码带上,这样服务员就可以直接为这位顾客服务了,这就是epoll

epoll为什么快

先说说传统I/O的工作方式,当进程或者线程等待I/O事件的时候,进程或者线程就阻塞了,这种情况下一个进程只能处理一个I/O流,如果我需要操作多个流呢,我可以采用忙轮询,挨个问,有流可以处理了,我就去处理,如果没有,接着挨个问,这样大多数时候CPU是空转的,时间片都被浪费了

这时,我们可以想象,要是有个人能帮我看着,知道哪个流有消息了告诉我,如果没有,程序就阻塞,这样也不用浪费CPU了

linux里有两个角色能实现这个功能,一个叫select,一个叫epoll

select的工作方式是这样的,程序在select处阻塞,有I/O流满足之后,程序会收到通知,然后可以进行处理,但是select并不知道哪个流准备好了,所以要轮询一遍,这样如果流多了之后,相应轮询的处理时间也变长了,要是我能知道哪个流准备好了就好了,这时epoll出现了

epoll就可以满足这个需求,在有流准备好的时候,我能知道是哪一个,直接去操作他就好了

总结一下,为什么快呢

  • 一次监控多个流
  • 免去轮询的时间
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值