select,poll,epoll与IO模型

本文介绍了IO模型的基础概念,包括流与IO操作、阻塞和解决阻塞的方法。详细讨论了忙轮询、select、epoll的优缺点,以及各种IO模型的工作原理,如阻塞IO、非阻塞IO、IO复用模型和异步IO模型。epoll作为IO复用模型的一种,因其高效特性成为处理大量连接请求的理想选择。
摘要由CSDN通过智能技术生成

几个基础概念

流与IO操作

可以进行I\O操作的内核对象,例如文件、管道、套接字……

流的入口:文件描述符(fd)

所有对流的读写操作,我们都可以称之为IO操作。

阻塞

         

阻塞等待: 空出大脑可以安心睡觉。(不占用CPU宝贵的时间片)

解决阻塞死等的办法

(1)忙轮询

非阻塞,忙轮询: 浪费时间,浪费电话费,占用快递员时间(占用CPU,系统资源)

(2)select

 

select 代收员比较懒,她只会告诉你快递到了,但是是谁到的,你需要挨个快递员问一遍

select、poll的几大缺点:

  • 每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大 
  • 同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大 
  • select支持的文件描述符数量太小了,默认是1024
  • poll的实现和select非常相似,只是描述fd集合的方式不同

(3)epoll(主角出场)

epoll特点好处:

与select,poll一样,但是增加了I/O多路复用的技术;

只关心“活跃”的链接,无需遍历全部描述符集合;

能够处理大量的链接请求(系统可以打开的文件数目)

IO模型 

POSIX(可移植操作系统接口)把同步IO操作定义为导致进程阻塞直到IO完成的操作,反之则是异步IO

按POSIX的描述似乎把同步和阻塞划等号,异步和非阻塞划等号,但是为什么有的人说同步IO不等于阻塞IO呢?先来说说几种常见的IO模型吧。

(1)阻塞IO模型

A同学用杯子装水,打开水龙头装满水然后离开。这一过程就可以看成是使用了阻塞IO模型,因为如果水龙头没有水,他也要等到有水并装满杯子才能离开去做别的事情。很显然,这种IO模型是同步的。

(2)非阻塞IO模型

B同学也用杯子装水,打开水龙头后发现没有水,它离开了,过一会他又拿着杯子来看看……在中间离开的这些时间里,B同学离开了装水现场(回到用户进程空间),可以做他自己的事情。这就是非阻塞IO模型。但是它只有是检查无数据的时候是非阻塞的,在数据到达的时候依然要等待复制数据到用户空间(等着水将水杯装满),因此它还是同步IO。

(3)IO复用模型(select,poll,epoll

这种IO模型比较特别,分个段。因为它能同时监听多个文件描述符(fd)。这个时候C同学来装水,发现有一排水龙头,舍管阿姨告诉他这些水龙头都还没有水,等有水了告诉他。于是等啊等(select调用中),过了一会阿姨告诉他有水了,但不知道是哪个水龙头有水,自己看吧。于是C同学一个个打开,往杯子里装水(recv)。这里再顺便说说鼎鼎大名的epoll(高性能的代名词啊),epoll也属于IO复用模型,主要区别在于舍管阿姨会告诉C同学哪几个水龙头有水了,不需要一个个打开看(当然还有其它区别)。

(4)信号驱动IO模型

D同学让舍管阿姨等有水的时候通知他(注册信号函数),没多久D同学得知有水了,跑去装水。是不是很像异步IO?很遗憾,它还是同步IO(省不了装水的时间啊)。

(5)异步IO模型

E同学让舍管阿姨将杯子装满水后通知他。整个过程E同学都可以做别的事情(没有recv),这才是真正的异步IO。

总结:

IO分两阶段:

1.数据准备阶段
2.内核空间复制回用户进程缓冲区阶段

一般来讲:阻塞IO模型、非阻塞IO模型、IO复用模型(select/poll/epoll)、信号驱动IO模型都属于同步IO,因为阶段2是阻塞的(尽管时间很短)。只有异步IO模型是符合POSIX异步IO操作含义的,不管在阶段1还是阶段2都可以干别的事。

参考1:https://blog.csdn.net/qq_35433716/article/details/85345907 

参考2:https://www.cnblogs.com/felixzh/p/10345929.html 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值