BIO、NIO、AIO理解(I/O模型)

news2024/11/24 4:01:23

IO模型(unix网络编程第一卷)

unix有五种I/O模型,好像其他系统也差不多吧。
I/O模型主要是两个阶段:等待数据与把数据从内核空间复制到用户空间,然后根据这两个阶段的不同,分类出来下面几类I/O模型。
前四个是同步IO,最后一个是异步IO,其分类是因为在第二阶段的不同。前面四个都是进程自己从内核空间复制数据,所以叫做同步;最后一个是操作系统将数据复制到进程的用户空间,然后通知进程去处理的,所以叫异步。

  • 阻塞I/O
  • 非阻塞I/O
  • I/O复用(select/poll)
  • 信号驱动I/O
  • 异步I/O

阻塞I/O

一旦开启,直接将本进程或者线程中断停止,等满足条件再把他们拉起来跑。比如开启开启一个socket监听连接,采用这种方式,没有连接时,监听的线程直接阻断。
厕所就一个茅坑,一个人占了,你去了一直在那等啥事也不干,并且不看人坑位人是否走了。这样你这个线程就相当于被阻塞那了,
在这里插入图片描述

下列数据报套接字例子很直观。
在这里插入图片描述

非阻塞I/O

俩字:轮询
非阻塞与上面阻塞I/O最大区别就是线程或者进程是否被阻断。
进程把一个套接字设置成非阻塞是在通知内核:当所请求的I/O操作非得把本进程投入睡眠才能完成时,不要把本进程投入睡眠,而是返回一个错误。
比如开启开启一个socket监听连接,采用这种方式,没有连接时,监听的线程不被阻断,而是占用CPU资源不断轮询。
厕所就一个茅坑,一个人占了,你去了一直在那等啥事也不干,但是你一直查看是否有人。这样你这个线程就相当于没有被阻塞,还在做事。
在这里插入图片描述

下列例子更形象。
在这里插入图片描述

I/O复用

关键即使复用俩字,相当于同时监听多路I/O事件,当某个达到条件即可。但是所有被阻断的话,那线程或者进程也是要被阻断的哦。
有了IO复用(IO multiplexing),我们就可以调用select或poll,阻塞在这两个系统调用中的某一个之上,而不是阻塞在真正的IO系统调用上。图6-3概括展示了IO复用模型。

厕所就多个茅坑,多个人占了,你去了一直在那等啥事也不干,一直监听着所有的位置。

在这里插入图片描述

注意

在这里插入图片描述

信号驱动IO

这个主要是使用信号来通知IO好了,让进程去调用系统调用去读取数据。

我们也可以用信号,让内核在描述符就绪时发送sIGIo信号通知我们。我们称这种模型为信号驱动式I/O (signal-driven v/O),图6-4是它的概要展示。

厕所就一个茅坑,一个人占了,你去了没坑,报备一下,等没人了用信号通知你,你去就行了
在这里插入图片描述

在这里插入图片描述

异步I/O

它的关键就是异步俩字,其与上面四种最大区别就是这个数据从内核空间复制到用户空间由内核完成。
这种模型与前一节介绍的信号驱动模型的主要区别在于:信号驱动式IO是由内核通知我们何时可以启动一个IO操作,而异步IO模型是由内核通知我们I/O操作何时完成。图6-5给出了一个例子。

厕所就一个茅坑,但这个是一个移动坑,一个人占了,你去了没坑,报备一下,等没人了直接移动到你旁边,不用你去,直接享受服务。
在这里插入图片描述

在这里插入图片描述

BIO、NIO、AIO

  • BIO 同步阻塞
  • NIO 同步非阻塞
  • AIO 异步非阻塞

BIO 上面第一种

同步并阻塞,服务实现模式为一个连接对应一个线程,即客户端发送一个连接,服务端要有一个线程来处理。如果连接多了,线程数量不够,就只能等待,即会发生阻塞。

NIO 上面第三种

同步非阻塞,服务实现模式是一个线程可以处理多个连接,即客户端发送的连接都会注册到多路复用器上,然后进行轮询连接,有I/O请求就处理
在这里插入图片描述

AIO 上面第五种

同步非阻塞,服务实现模式是一个线程可以处理多个连接,即客户端发送的连接都会注册到多路复用器上,然后进行轮询连接,有I/O请求就处理

区别与应用

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/91397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高并发下你还敢用ArrayList?过来看看CopyOnWriteArrayList吧!

一、ArrayList线程不安全 在Java的集合框架中,想必大家对ArrayList肯定不陌生,单线程的情况下使用它去做一些CRUD的操作是非常方便的,先来看看这个例子: public class ListTest {public static void main(String[] args) {List&…

GIS基于智慧城市建设的作用

​​​​​智慧城市的建设对于改善居民的生活质量和提高城市的管理水平,有着公认的推动作用。其中,地理信息技术特别是GIS平台,在智慧城市的建设过程中扮演着关键角色。 在现实情况中,除了政策本身的一些因素,受限于一…

Web前端105天-day44-JSCORE

JSCORE04 目录 前言 一、复习 二、forEach 三、reduce 四、展开语法 五、解构语法 六、形参默认值 七、剩余参数 总结 前言 JSCORE04学习开始 一、复习 JS的第6个版本, 带来了大量的新特性, 新语法let/const : 两个新的声明变量的方式 新的作用域 脚本: 对应全局, 用…

RocketMQ中的线程池是如何创建的?

前言 大家好,今天主要来和大家聊一聊RocketMQ中的线程池是如何创建的,如何设置线程池数量,同时也可以从中去学习到一些线程池的实践和需要注意的一些细节。 RocketMQ在哪些地方使用到了线程池? 在RocketMQ中存在了大量的对线程…

学籍信息网站

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 学籍信息管理:添加信息、修改信息、删除信息、查询信息 添加信息,管理员根据学生的将信息导入系…

[附源码]Python计算机毕业设计高校师资管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

行业分析| 智慧头盔在快对讲上的应用与实践

快对讲综合调度系统是基于移动通信网络, 整合集群对讲、视频监控、实时音视频技术、PSTN、GIS定位、IM和调度业务的产品,为客户提供专业对讲、视频会议、可视化融合指挥调度等功能为一体的音视频实时交互平台。 快对讲和智慧头盔 智慧头盔,…

PHP实验室管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP实验室管理系统 是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为PHP APACHE,数据库为 mysql5.0,使用php语言开发。 PHP…

第10讲:vue脚手架集成axios

一、创建项目并添加axios支持 创建项目请参考:使用脚手架创建vue项目 创建路由项目请参考:路由开发 1.1、添加axios支持 使用如下命令添加axios支持 npm install axios //vue-cli2.0安装方式1.2、在main.js中引用并使用axios 使用如下命令 impor…

git初识(三)

分支 顾名思义,分支就是从主线上分离出来进行另外的操作,而又不影响主线,主线又可以继续干它的事,,最后分支做完事后合并到主线上而分支的任务完成可以删掉了。为了不受其他开发人员的影响,你可以在主分支…

数据看板可视化

前言 这段时间一直在做可视化,在我的项目中有一部分是电力巡检的数据可视化。其中的数据看板比较简单,我将其单独抽离出来形成一个demo,为保密demo中数据非真实数据。先看效果。 具体效果 链接相关 浏览链接:http://xisite.top…

【人工智能与机器学习】——聚类(学习笔记)

📖 前言:我们之前学习的算法均是有监督学习(supervised learning),它的一个鲜明特征是通过给定的标签来学习从数据特征(如图像)到语义标签的映射关系。但在很多实际问题中,数据并没有…

vuex笔记

Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 调试工具:vue devtools Vuex就像眼镜:您自会知道什么时候需要它。 1、state 在store中定义数据,在组件中直接使用: 目录:store/index.js export defau…

相关分析与回归分析

相关与回归分析就是了解变量之间相关关系的统计方法 一.相关分析 具有相关关系的变量之间,如果不区分原因和结果,我们称之为相关分析 相关分析是看两个因素之间的相关性,不需要确定哪个是自变量,哪个是因变量,两个因…

RK3568 GT911触摸屏调试

屏幕规格书 需要主要硬件通信电压为:1.8V或者3.3V I2C通信的地址:0x5D 和0x40 系统上电时序:不同的地址,稍微有些差异 对应代码中如下: 与RK3568的硬件接口电路 DTS 配置 驱动:RK自带的驱动程序就可以正确工…

音视频学习 -- 弱网对抗技术相关实践

背景介绍 实时音视频通话在当前的生活中是无时不刻存在的,包括社交、安防、交通等等各个方面都需要。用户场景复杂多变、要求严苛、网络环境不一致等给实时音视频通话带来很大条件。我们在这方向稍微做了一些工作,虽然和其他大厂的优化工作相比&#xf…

Commons Collections3

省流 SerialKiller 可以通过⿊名单与⽩名单的⽅式来限制反序列化时允许通过的 类,其中限制了cc1和cc2中命令执行的类,InvokerTransformer cc3就是为了绕过对其的限制,这里使用的是com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter来…

基于改进的DBN降水预测方法(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 精确高效的降水预测模型可以更好地反映未来的气候,为管理决策提供重要参考,帮助人们为未来的恶劣天气做…

首个元宇宙国家?!# Tuvalu

当我们还在谈论如何设计和构建一个未来城市的时候,首个入驻元宇宙的国家也诞生了。太平洋岛国「图瓦卢」开始 在虚拟世界创建一个数字国家。这是个怎样的国家?图瓦卢是位于南太平洋的一个岛国,人口约为 1.2 万,由 9 个环形小珊瑚岛…

FKM规范静强度和疲劳强度计算分析

1. 概述 WB-FKM/WB-FKM-Weld工具包是德国CADFEM公司基于FKM规范(德国机械协会主持和通过的机械产品强度评估规范)的基础上,在ANSYS WB内开发的针对结构母材及焊缝进行静强度和疲劳强度评估的工具包。 该工具包的最大优势是:基于AN…