IO总结看这里
创始人
2025-06-01 09:09:22
0

IO模型

IO读写在用户缓冲区和内核缓冲区交互

在这里插入图片描述

1、阻塞IO

阻塞IO在两个阶段都会阻塞等待:数据就绪,数据拷贝(内核到用户)

执行流程

1、用户调用recvfrom发起系统调用请求内核

2、等待数据就绪(没有准备好数据则会阻塞)

3、从内核拷贝数据到用户(没有完成则会阻塞等待)

4、拷贝完成发送标记给用户,处理数据

在这里插入图片描述

2、非阻塞IO

相较于阻塞IO,非阻塞IO的recvfrom操作会立即返回结果而不是阻塞用户

在这里插入图片描述

如果数据没有准备就绪,那么不会阻塞用户而是返回block标记,反复请求recvfrom

缺点

1、进程需要反复调用recvfrom,等待数据准备、拷贝完成后结束

2、频繁的recvfrom相较于阻塞IO并没有提高效率,并且盲等机制会造成CPU空转

3、IO多路复用

无论是阻塞IO还是非阻塞IO,差别在于第一阶段准备数据就绪的处理不同;

比如服务器处理客户端Socket请求时,在单线程情况下,一次只能处理一个Socket,一旦正在处理的Socket未就绪(不可读或者不可写)线程便会阻塞,这是所有的客户端Socket都必须等待,性能自然会很差;

在这里插入图片描述

类比用户排队点餐,阻塞IO即第一个用户在思考要吃什么,后续的用户都会阻塞等待,而非阻塞IO的区别在于前台会一直询问你想好了吗

解决方案

1、增加更多的服务员(多线程,资源消耗大)

2、不排队,谁想好了吃什么(数据就绪),服务员就给谁点餐(处理数据)

用户进程如何知道资源准备就绪?

文件描述符简称FD是一个从0开始递增的无符号整数,用来关联Linux中的每一个文件,在Linux中一切皆文件,如常规文件,音频硬件设备,当然也包括Socket网络套接字

多路复用是利用单个线程来同时监听多个FD,从而在某个FD可读或者可写时得到通知,避免CPU进行无效的等待

在这里插入图片描述

执行

1、进程调用select同时监听多个Sockets,数据准备就绪后返回readbale可读标记

2、进程反复调用recvfrom等待返回成功标志

监听FD的方式

三者的区别在于selectpoll只知道通知用户进程有FD就绪,而不知道具体是哪个FDepoll 则会通知用户进程FD就绪的同时,把已经就绪的FD写入用户空间

select

在这里插入图片描述

这里的FD存储单位是1比特,可以存储1024个比特位的FD标识;

参数包括:

1、监听的FD集合(读写和异常集合)

2、监听的最大fd+1

3、超时时间

在这里插入图片描述

流程

1、创建fd_set即1024比特的监听数组

2、标记监听的fd(由低位到高位)

3、执行select函数参数有读写异常数组、标记个数、最大fd+1

4、将fd_set拷贝到内核空间进行监听,等待超时后清除未就绪的标记,将fd_set拷贝回用户空间

5、用户空间仍然不知道那些是标记的,需要遍历得到结果

存在的问题

1、需要在用户态拷贝到内核态后,再次拷贝回用户态,且用户态无法得知被标记的fd,需要遍历

2、监听的数量只有1024

poll

性能提升相较于select仍然没有较大提升

在这里插入图片描述

IO流程

1、创建pollfd数组,向其添加关注的fd信息,数组大小自定义

2、调用poll函数,将pollfd数组拷贝到内核态,链表存储无上限

3、遍历fd,判断是否就绪

4、数据就绪或者超时后,拷贝pollfd数组到用户空间,返回就绪fd的数量n

4、用户进程判断n是否大于0

5、大于0则遍历pollfd数组,找到就绪的fd

存在的问题

相较于select监听,监听的数量提升了,但是遍历fd效率会降低

epoll

在这里插入图片描述

流程

1、epoll_create

会在内核创建eventpoll结构体(存储fd集合的红黑树,存储就绪fd集合的链表)

2、epoll_ctl(添加监听的fd,关联callback事件)

callback触发,将就绪的fd添加到redlist

3、epoll_wait检查redlist不为空,返回个数并拷贝就绪的fd集合到events

在这里插入图片描述

相关内容

热门资讯

迷你退出安卓系统了吗,转型新篇... 最近有没有发现你的手机上那个可爱的迷你退出图标突然不见了?别急,让我来给你揭秘迷你退出安卓系统了吗的...
华为优先使用安卓系统,打造自主... 你知道吗?最近科技圈里有个大动作,那就是华为宣布优先使用安卓系统。这可不是一个简单的决定,它背后可是...
安卓系统隐藏了设置,隐藏设置功... 你知道吗?安卓系统这个大宝藏里,竟然隐藏着一些不为人知的设置!是不是听起来就有点小激动呢?别急,今天...
反渣恋爱系统安卓,收获真爱 你有没有听说过那个神奇的“反渣恋爱系统安卓”呢?最近,这款应用在网络上可是火得一塌糊涂,不少单身狗都...
安卓出厂系统能升级,探索无限可... 你知道吗?现在这个时代,手机更新换代的速度简直就像坐上了火箭!而说到手机,安卓系统可是占据了半壁江山...
老安卓刷机系统,从入门到精通 你有没有想过,你的老安卓手机其实还有大大的潜力呢?没错,就是那个陪伴你多年的老安卓,它可不是只能用来...
安卓粉ios系统app,兼容性... 你有没有发现,身边的朋友圈里,安卓粉和iOS系统粉总是争论不休?今天,咱们就来聊聊这个话题,看看安卓...
安卓系统语言下载,探索安卓系统... 你有没有想过,你的安卓手机是不是该换换口味了?没错,就是语言!想象如果你能轻松切换到自己喜欢的语言,...
安卓共有多少种系统,究竟有多少... 你有没有想过,安卓这个我们每天不离手的操作系统,竟然有那么多不同的版本呢?没错,安卓系统就像一个大家...
安卓系统怎么播放swf,And... 你有没有遇到过这种情况:手里拿着一部安卓手机,想看一个SWF格式的动画,结果发现怎么也打不开?别急,...
pos机安卓系统跟win系统,... 你有没有想过,那些在我们生活中默默无闻的POS机,竟然也有自己的操作系统呢?没错,就是安卓系统和Wi...
俄罗斯封禁安卓系统,本土化替代... 俄罗斯封禁安卓系统的背后:技术、经济与社会的影响在数字化浪潮席卷全球的今天,智能手机已成为我们生活中...
安卓系统总是弹出权限,安卓系统... 手机里的安卓系统是不是总爱和你玩捉迷藏?每次打开一个应用,它就跳出来问你要不要给它开权限,真是让人又...
安卓系统测血氧,便捷健康生活新... 你知道吗?现在科技的发展真是让人惊叹不已!手机,这个我们日常生活中不可或缺的小玩意儿,竟然也能变身成...
蓝光助手安卓系统的,深度解析与... 你有没有发现,现在手机屏幕越来越大,看视频、刷抖音,简直爽到飞起!但是,你知道吗?长时间盯着屏幕,尤...
安卓系统如何隐藏提示,Andr... 你是不是也和我一样,在使用安卓手机的时候,总是被那些弹出来的提示信息打扰到?别急,今天就来教你怎么巧...
安卓6.0系统如何分区,And... 你有没有想过,你的安卓手机里那些神秘的分区到底是怎么来的?别急,今天就来给你揭秘安卓6.0系统如何分...
安卓系统图片怎么涂鸦,指尖上的... 你有没有想过,在安卓系统的手机上,那些单调的图片也能变得生动有趣呢?没错,就是涂鸦!今天,就让我来带...
安卓系统40g,40GB存储空... 你有没有发现,最近你的安卓手机突然变得有点“胖”了呢?没错,就是那个传说中的40G!别急,别慌,今天...
安卓5.0系统怎么重置,轻松实... 手机用久了是不是感觉卡得要命?别急,今天就来教你怎么给安卓5.0系统来个彻底的重置,让它焕发新生!一...