io之io模型

news2024/9/22 7:25:45

写在前面

本文一起看下常见的io模型。

1:基础知识

同步异步,阻塞阻塞,区别如下:

同步异步:描述的通信模式,即结果如果是主动的获取则是同步,处理结果是被动的接收则是异步
阻塞非阻塞:描述的是线程的处理模式,即关注线程的状态

究竟啥意思?意会吧!!!

2:io模型

为了提升io的效率,不同的io模型被提了出来,如下图一共5中:

在这里插入图片描述

2.1:阻塞IO模型

对应Java的BIO,一种阻塞同步的IO模型,应用程序执行read操作后,一直阻塞等待,直到内核将数据从内核内存拷贝到用户内存,如下图:

在这里插入图片描述

在这里插入图片描述

2.2:非阻塞IO模型

不同于阻塞io的地方在于,线程不会阻塞,而是直接返回先忙其他事情,之后再定期的查询数据准备情况,但从通信模式看依然是同步的,因为需要主动获取结果,所以这是一种同步非阻塞的io模型,对应Java的就是NIO,即non blocking io,如下图:

在这里插入图片描述

在这里插入图片描述

2.3:非阻塞IO模型

io多路复用,这种io模型类似于非阻塞IO的地方在于都有一个定期轮询数据状态的操作,但是不同之处在这个轮询的动作由内核执行select/poll来完成,然后业务线程只需要一个来阻塞等待就行了,并且内核轮询的不是一个socket,而是一组socket,所以效率会有比较大的提升,如下图:

在这里插入图片描述

常规的select和poll实现,包含如下的不足:

1:需要将fd从内核拷贝到用户空间
2:所有的fd都需要遍历,效率低
3:支持的fd个数少,为1024个

在Linux 3正式发布了epoll,具备如下优点:

1:开辟了内核和用户公用的内存空间,解决了fd从内核拷贝到用户空间的问题
2:通过回调解决需要轮询fd的问题
3:fd的个数限制支持达到了10万级,则可支持10万的连接

参考下图:

在这里插入图片描述

注意到上图就没有数据从内核拷贝到用户空间的过程了,因为有了内核和用户控件公用的内存空间。

2.4:信号驱动io模型

这种方式不需要阻塞等待数据,也不需要轮询数据,只需要给内核发送一个信号,告知其需要什么数据,之后内核在数据准备完毕之后,同样会给应用程序一个信号,让其来读取数据,这个过程应用线程不阻塞,但读取数据的过程依然是阻塞,因此这是一种同步非阻塞的io模型,如下图:

在这里插入图片描述

2.5:异步io

这是唯一的一种真正支持异步的io模型,用户进程调用内核后直接返回,内核在数据准备完毕后,会将数据从内核拷贝到用户进程缓冲区,然后再给用户进程发送信号(或者回调,不管哪种方式数据对于用应用进程来说已经是直接可以使用的状态了),告知应用进程数据准备完毕(这点和信号驱动不同,信号驱动是在数据到内核的时候就发出信号,所以信号驱动不是异步的,因为还需要用户进程阻塞的拷贝数据到用户进程缓冲区),如下图:

在这里插入图片描述

目前异步io这种模型应用的并不多,因为广泛应用在服务器的linux系统并不支持,当前支持这种io模型的是Windows的iocp模型。

写在后面

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

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

相关文章

网页提交文件无法打开问题解决办法(以学习通为例)

时长会碰到这样的情况,日常实训课在机房写实训作业时,将未完成的作业先暂存先在学习通里,但后续在登陆学习通时发现未提交的附件打不开了,经过翻阅之前web的相关资料,总结出了这样的解决办法,供各位参考。 …

时间基础概念及Linux中的时间函数

时间基础概念及Linux中的时间函数 时间相关概念GMT 时间UTC 时间时区 Time Zone夏令时 DST本地时间 localtime Linux 系统中的时间时钟基础概念系统节拍数 jiffiesLinux系统查看时间及配置时区获取时间函数获取 当前时间 time()获取 当前时间(微秒) gett…

Qt Quick系列(5)—键盘输入

🚀作者:CAccept 🎂专栏:Qt Quick 文章目录 前言代码示例单一按键组合按键 前言 本篇将介绍如何处理Qt Quick中的键盘输入。键盘输入在现代应用程序中扮演着重要角色,无论是快捷键还是文本输入都离不开它。通过本篇教…

(2021,FastGAN)用于高保真 few-shot 图像合成的更快、更稳定的 GAN 训练

Towards faster and stabilized gan training for high-fidelity few-shot image synthesis 公众号:EDPJ 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.1 跳跃层通道激励 3.2 自监督判别器 4. 实验 4.1 图像合成性能 4.2 更多分析与应用 5. 结论 参…

JL-8D/4X1 定时限电流继电器 用于输变电线路中 JOSEF约瑟

名称:定时限电流继电器型号:JL-8D/4X1触点容量250V5A功率消耗<5W返回系数0.90.97整定范围0.039.9A;0.130A辅助电源24220VDC/AC 系列型号: JL-8D/3X1定时限电流继电器;JL-8D/3X2定时限电流继电器; JL-8D/4X1定时限电流继电器&am…

【发电厂 HDLN-1-2Z 不带辅助电源电流继电器 导轨安装 JOSEF约瑟】

品牌:上海约瑟,名称:不带辅助电源电流继电器,型号:HDLN-1-2Z-2,触点容量:250V5A,整定范围:2-99.9A;特点:精度高,整定范围宽,动作快&am…

看完这篇 教你玩转渗透测试靶机vulnhub—DarkHole2

Vulnhub靶机DarkHole渗透测试详解 Vulnhub靶机介绍:Vulnhub靶机下载:Vulnhub靶机安装:Vulnhub靶机漏洞详解:①:信息收集:②:Git信息泄露:③:SQL注入:④&#…

APP出海的现状与挑战​

随着国内移动互联网市场的饱和,越来越多的国内APP开发者和企业将目光投向了海外市场,寻求新的增长机会。根据艾瑞咨询的数据,2020年上半年,全球APP下载量达到715亿次,用户总支出达到501亿美元,其中中国出海…

Pytorch基本概念和使用方法

目录 1 Adam及优化器optimizer(Adam、SGD等)是如何选用的? 1)Momentum 2)RMSProp 3)Adam 2 Pytorch的使用以及Pytorch在以后学习工作中的应用场景。 1)Pytorch的使用 2)应用场…

vue methods 互相调用的方法

methods是一个内置的函数,主要用于两个组件之间的数据传递,也就是调用方法。下面给大家介绍一个在 vue中互相调用的方法,在使用过程中可以参考一下。 methods实现了两个组件之间数据的传递,我们先来看一下 Methods是如何实现数据传…

统计软件与数据分析Lesson17----利用pytorch构建LSTM预测股票收益率详细教程

利用pytorch构建LSTM预测股票收益率详细教程 1. 整体实现思路2.代码编写2.1 step1:导入所需的库2.2 step2: 读取数据、构建训练样本2.3 step3: 定义部分辅助函数2.4 step4:LSTM模型构建2.5 step5:模型训练2.6 step6:模型预测和评估 3. 小结 1. 整体实现思路 step1:导入所需的库…

对抗样本攻击

目录 一、对抗样本攻击的基本原理 1.1 什么是对抗样本攻击和对抗样本 1.2 对抗样本攻击的基本思路 1.3 对抗样本攻击的分类 1.3.1 按攻击效果分类 1.3.2 按攻击者能力分类 1.3.3 按攻击环境分类 1.4 对抗扰动的衡量 二、对抗样本攻击方法 一、对抗样本攻击的基本原理 …

华为OD机试真题B卷 Java 实现【最少交换次数】,附详细解题思路

一、题目描述 给出数字K&#xff0c;请输出所有小于K的整数组合到一起的最小交换次数。 组合一起是指满足条件的数字相邻&#xff0c;不要求相邻后在数组中的位置。 取值范围&#xff1a; -100 < K < 100 -100 < 数组中的数值 < 100 二、输入描述 第一行输入…

网络安全合规-ISO 27001(一)

实施ISO27001认证的步骤 在长期实践过程中&#xff0c;总结创新了一套高效可行的ISO27001/ISMS项目实施的规范流程。 一、现状调研分析&#xff1a;我方派咨询师去企业了解基本情况&#xff1b;本阶段主要是前期的准备和计划工作&#xff0c;包括明确评估目标&#xff0c;确定…

如何远程控制电脑,远程控制电脑的设置方法

很多人无论是在工作还是生活中使用电脑的时候都需要用到远程控制&#xff0c;因为它可以方便我们解决很多需要到现场操作的问题&#xff0c;在很大方面提升了我们的工作效率&#xff0c;下面来跟大家分享一下&#xff0c;如何远程控制电脑&#xff0c;远程控制电脑的设置方法 …

Web应用技术(第十五周/持续更新)

本次练习基于how2j和课本&#xff0c;进行SSM的初步整合&#xff0c;理解SSM整合的原理、好处。 SSM整合应用 1.简单的实例项目&#xff1a;2.原理分析&#xff1a;3.浅谈使用SSM框架化&#xff1a; 1.简单的实例项目&#xff1a; how2j 2.原理分析&#xff1a; 具体见流程图…

【网络】基础知识1

目录 网络发展 独立模式 网络互联 局域网LAN 广域网WAN 什么是协议 初识网络协议 协议分层 OSI七层模型 TCP/IP四层&#xff08;或五层&#xff09;模型 OSI和TCP/IP对比 网络传输流程 什么是报头 局域网通信原理 同网段的主机通讯 跨网段的主机通讯 数据包封装…

Kali搭建GVM完整版-渗透测试模拟环境(7)

上一篇:OpenVAS、GSA配置验证-渗透测试模拟环境(6)_luozhonghua2000的博客-CSDN博客 在bt5上面进行了安装,调试等配置验证,这篇在kali上面继续安装调试卸载等配置验证,中途版本问题,依赖问题,脚本编写都一一解决。 特别是因网络原因造成的rsync: [Receiver] safe_read f…

Sinkhorn-Knopp算法

Sinkhorn-Knopp是为了解决最优传输问题所提出的。 Sinkhorn算法原理 最优运输问题的目标就是以最小的成本将一个概率分布转换为另一个概率分布。即将概率分布 c 以最小的成本转换到概率分布 r&#xff0c;此时就要获得一个分配方案 P ∈ R n m 其中需满足以下条件&#xff1…

数据分析应该怎么学习?适合什么人学?

先来分享下适合学习数据分析的人群&#xff1a; 数据爱好者&#xff1a;对数据比较感兴趣&#xff0c;喜欢从数据中发现问题&#xff0c;有一定的见解&#xff0c;那么数据分析可以让这类小伙伴能够更好的理解和解释数据。市场营销、运营、业务分析&#xff1a;这类小伙伴学习…