Linux系统中IO多路复用
发布日期:2021-06-29 03:44:37 浏览次数:3 分类:技术文章

本文共 1001 字,大约阅读时间需要 3 分钟。

文章目录


1 什么是IO多路复用

常见的IO模型中,一般有四种,阻塞IO模型,非阻塞IO模型,IO复用模型,信号驱动IO模型,异步IO模型,

我们在去理解IO复用模型之前,首先去理解一下其他的四种IO模型

1.1 阻塞IO模型

阻塞IO模型就是我们在使用BIO去开源socket的时候,通过socket进行accpet,read的时候,都属于阻塞IO模型,他们会直到数据连接到达,以及数据就绪或者发生错误的时候返回。

在这里插入图片描述

1.2 非阻塞IO模型

recvfrom 从应用层到内核的时候,如果该缓存区没有数据的时候,就直接返回一个EWOULDBLOCK错误,一般都对非阻塞IO模型进行轮询检查这个状态,看内核是不是有数据到来

在这里插入图片描述

1.3 IO复用模型

Linux系统提供 select/poll,进程通过将一个或者多个fd传递给select或者poll系统调用,阻塞在select操作上,这样select/poll可以帮助我们侦测多个fd是否处于就绪状态,select/poll是顺序扫描fd是否就绪,而且支持的fd数量有限,因此使用它受到一些限制,linux还提供了一个epoll系统调用,epoll使用基于事件驱动方式代替顺序扫描,因此性能更高,当有fd就绪时,立即回调rollback函数

在这里插入图片描述

1.4 信号驱动IO模型

首先开启套接口信号驱动IO功能,并通过系统调用sigaction执行一个信号处理函数(此系统调用立即返回,进行继续工作,非阻塞的),当数据准备就绪,就为改进程生成一个SIGIO信号,通过信号回调通知应用程序调用recvfrom来读取数据,并通知主循环处理数据,【不是很明白】

在这里插入图片描述

1.5 异步IO模型

告知内核启动某个操作,并让内核在整个操作完成后(包括将数据从内核复制到用户自己的缓存区)通知我们,这种模型与信号驱动模型的主要区别是:信号驱动IO由内核通知我们何时可以开始一个IO操作,异步IO模型由内核通知我们IO操作何时已经完成。

在这里插入图片描述

2 IO多路复用,epoll

epoll针对于原始的poll和select技术,做的很大的改进:

1,支持一个进程打开的socket描述符(fd)不受限制(仅受限于操作系统的最大文件句柄数)
2,IO效率不会随着FD数目的增加而线性下降
在这里插入图片描述
3,使用mmap加速内核与用户空间的消息传递
在这里插入图片描述
【注】:针对于epoll对于使用mmap技术的争议,可以移步: 进行分析

转载地址:https://blog.csdn.net/zcswl7961/article/details/105303055 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Feign-Get请求自动转成Post问题分析
下一篇:Spring事务的传播行为特性详解

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月20日 14时40分23秒