五种IO模型

知识点复习42 Java NIO 01 1.1. JavaIO读写原理 无论是Socket的读写还是文件的读写,在Java层面的应用开发或者是linux系统底层开发,都属于输入input和输出output的处理,简称为IO读写。在原理上和处理流程上,都是一致的。区别在于参数的不同。 用户程序进行IO的读写,基本上会用到read&write两大系统调用。可能不同操作系统,名称不完全一样,但是功能是一样的。 先强调一个基础知... 阅读详情
五种IO模型

在进程使用磁盘的数据的时候,需要用到几个空间
磁盘
内核缓冲区kernel buffer
用户缓冲区app buffer

其中内核缓冲区和用户缓冲区都属于内存的范畴,首先内核需要将数据从磁盘拷贝到内核缓冲区,然后再从内核缓冲区拷贝到用户缓冲区,接下来才能够被用户进程使用

这里首先定义几个角色和空间,两个角色kernel,httpd,五个存储空间磁盘,内核缓冲区,用户缓冲区,socket缓冲区(send缓冲区,recv缓冲区),NIC

数据在磁盘等外部硬件设备和内存之间的数据拷贝的时候不需要cpu的参与,此时使用 的DMA的数据拷贝的方式,比如磁盘到内核缓冲区之间的数据拷贝的时候,还有就是将socket缓冲求到NIC(网卡)之间的数据拷贝的时候是不需要CPU参与的

如果数据在内存等缓冲区之间拷贝数据的时候是需要cpu参与的,比如从内核缓冲区到用户缓冲区,从用户缓冲区到socket缓冲区的时候

  1. 阻塞式IO — 阻塞的是httpd
    钓鱼—一直等,一直等
    如果设置的是阻塞式IO的话,httpd告知内核,需要读取哪些数据,此时内核去读取数据,这个时候httpd是被阻塞的,内核将数据从磁盘拷贝到内核缓冲区,然后将内核缓冲区中的数据拷贝到用户缓冲区,直到这个时候httpd被唤醒,从而处理用户缓冲区中的数据
    上面的过程中,从磁盘拷贝到内核缓冲区的时候不需要cpu参与,这个时候CPU可以去处理其他的事情,最大可能的利用cpu;
    当从磁盘缓冲区拷贝到用户缓冲区的时候,httpd是被阻塞的,有助于提高拷贝速度

  2. 非阻塞式IO
    钓鱼 —- 一会过来问一下,一会过来问一下
    当httpd发起一个请求的时候,比如说是read的时候,这个时候会返回一个错误值,但是httpd没有进入到休眠状态,而是不断的发起read请求,不断询问内核数据是不是准备好了,直到数据从磁盘拷贝内核缓冲区的时候,这个时候read不再是错误了,此时需用将内核缓冲求的数据拷贝到用户缓冲区,这个时候需要cpu的参与,所以此时将httpd阻塞,等到数据全部拷贝到用户缓冲区的时候,httpd才被唤醒,这个时候继续处理就好了

  3. 信号驱动IO
    钓鱼 — 加上一个鱼鳔
    httpd会发起一个信号处理的系统调用,如sigaction(),这个系统调用是立即返回的,此时内核从磁盘中拷贝数据到内核缓冲区,当数据准备好了之后,发送一个信号给httpd,此时httpd会发起read请求,将数据从内核缓冲区拷贝到用户缓冲区
    在发起信号到收到信号的时候,httpd没有被阻塞,他可以去干其他的事情,当数据从内核缓冲区拷贝到用户缓冲区的时候,因为需要cpu的参与,此时httpd被阻塞了

  4. 异步IO
    钓鱼 – 将钓鱼的任务交给其他人处理,直接把鱼给我就好了
    httpd会发起一个异步IO的系统调用如aio_read()等,并立即返回,这个异步系统调用告诉内核,不仅要将数据拷贝到内核中,还要讲数据从内核缓冲求拷贝到用户缓冲区,数据拷贝到用户缓冲区之后,发送 一个信号告诉httpd数据准备好了,然后httpd再去处理数据
    上面的这些过程httpd都没有被阻塞

异步IO存在的一个问题就是,因为在将数据从内核缓冲区拷贝到用户缓冲区的时候,需要CPU参与,此时会存在httpd和内核争用cpu的 情况,如果并发量很大的时候,信号响应的速度回很慢,这个时候就会极大的影响性能

  1. IO复用
    钓鱼 – 100个鱼竿
    有三种模型,select,poll,epoll
    他们都是一种函数,用于监控执行文件描述符的数据是否就绪,就绪的意思可以理解为对于某个系统调用不在阻塞了,例如使用read的时候,就绪的意思就是说数据准备好了
    就绪的种类包括是否可读,是否可写,是否异常,

使用 上面的三种函数的作用实际上是监控数据是否被成功的写入到了内核缓冲区或者数据是否被成功的写入了socket缓冲区(send缓冲区)

当httpd调用select的时候,会被select“阻塞”,这个阻塞时长可以被设置,如果是0,则是立即返回,然后轮询,还可以设置为永久阻塞,当数据从磁盘拷贝到内核缓冲区的时候,被select监控到了,此时select会唤醒httpd,httpd会再次调用read函数,将数据从内核缓冲区拷贝到用户缓冲区,然后执行后续的操作

IO复用的优势在于,他可以同时监控多个文件描述符

[特殊字符] 智能补货(AI-driven Replenishment)完整实施方案 补货量=预测需求+安全库存−当前库存补货量 = 预测需求 + 安全库存 - 当前库存补货量=预测需求+安全库存−当前库存。:基于 LSTM/Transformer 预测未来 30/60/90 天的销量。 阅读详情

相关推荐

解决fetch_california_housing数据集403错误的3种实用方法(附手动下载地址)

本文针对机器学习中常见的fetch_california_housing数据集403 Forbidden错误,提供了三种实用的解决方案。从理解HTTP 403错误的根源出发,详细介绍了修改源码路径、使用国内镜像源以及手动下载并配置数据文件这三种方法,并附带了可靠的手动下载地址,帮助开发者彻底解决数据加载障碍,确保机器学习项目顺利进行。

weixin_29062963的博客 561

5种IO模型

从TCP发送数据的流程说起 产生各种IO的原因是什么。本质问题,一条消息是如何从一个人发送到另一个人。 以两个应用程序为例,当‘A’向‘B’发送一条消息: 1.应用A把消息发送到TCP缓冲区。 2.TCP发送缓冲区把消息发送出去,经过网络传递后,消息会发送到B服务器得TCP接收缓冲区。 3.B在从TCP缓冲区去读取属于自己的数据。 阻塞IO(BIO)/非阻塞IO(NIO) 应用B从TCP缓冲区中...

baihehaitangyijiu的博客 450

新手避坑指南:用Silvaco Atlas搞定GaN HEMT电热仿真的完整流程(附代码解读)

本文详细介绍了使用Silvaco Atlas进行GaN HEMT电热特性仿真的完整流程,特别针对新手常见问题提供避坑指南。从软件环境配置、结构定义、网格划分到物理模型设置,逐步解析关键步骤,并附有代码解读和调试技巧,帮助读者快速掌握GaN器件仿真的核心技术。

weixin_29215815的博客 597

select、poll、epoll之间的区别总结

select、poll、epoll之间的区别总结[整理]select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负

Joe's Blog 315

DAP-Link DIY复刻指南

DAP-Link是ARM开源的一个项目,主要用于代码下载以及调试,支持SWD和JTAG调试接口,对于开发嵌入式的同学相信都或多或少有所耳闻。除了DAP-Link之外还有很多同类型的调试器,如ST-LinkJ-Link,但是这些都是不开源的,无法复刻或进行二次开发。但DAP-Link不同,完全开源,不用担心侵权问题,且随着开源社区大家的共同努力,DAP-Link经过了不断的迭代,先如今已取代ARM之前推出的CMSIS-DAP开源项目。

爱出名的狗腿子 1万+

AD56XXR系列DAC驱动设计:SPI接口、寄存器配置与嵌入式工程实践

数模转换器(DAC)是嵌入式系统实现高精度模拟控制的核心器件,其性能取决于通信协议可靠性、寄存器配置准确性及硬件协同设计能力。基于SPI总线的电压输出型DAC广泛应用于工业控制、光模块偏置、传感器校准等场景,需兼顾静态精度、动态响应与低功耗特性。AD56XXR系列作为典型集成内部基准与多通道同步更新能力的12/14/16位DAC,支持轨到轨输出与灵活掉电模式,为资源受限MCU提供可移植固件范式。本文围绕SPI时序约束、16位指令字解析、LDAC同步机制及精度补偿策略展开,覆盖从硬件连接、初始化流程到量产级可

weixin_33481022的博客 611

聊聊Linux 五种IO模型

为什么80%的码农都做不了架构师?>>> ...

weixin_34235457的博客 1007

非root用户如何在CentOS7集群上编译安装OpenFOAM6

本文详细介绍了在CentOS7集群上以非root用户身份编译安装OpenFOAM6的完整流程。通过环境准备、依赖包离线获取、源码编译安装等步骤,解决了集群环境下权限和依赖问题,特别针对OpenMPI和Boost库提供了优化配置建议,帮助用户高效完成安装并优化性能。

weixin_28826961的博客 681

五种I/O模型入门

Socket 一、I/O模型 Unix 有五种 I/O 模型: 阻塞式 I/O 非阻塞式 I/O I/O 复用(select 和 poll) 信号驱动式 I/O(SIGIO) 异步 I/O(AIO) 阻塞式IO 应用进程被阻塞,直到数据从内核缓冲区复制到应用进程缓冲区中才返回。 data = socket.read();//如果没有数据就一直阻塞在read() 在阻塞的过程中,其它应用进程还...

weixin_46053707的博客 307

多普勒效应及多普勒频移的简单推导

多普勒频移的简单推导

m0_47867419的博客 3万+

等保测评-达梦数据库

一般适用于等保测评

m0_54146694的博客 1298

【Linux网络】五种IO模型与非阻塞IO

摘要:五种I/O模型及其核心概念 本文通过钓鱼的生动比喻,系统阐述了五种I/O模型的核心差异。I/O操作本质包含"等待"和"拷贝"两个阶段,其中等待时间往往占据主要比重。阻塞I/O(专注等待)、非阻塞I/O(轮询检查)、信号驱动I/O(事件通知)、多路复用(批量监控)和异步I/O(全权委托)分别对应不同的效率优化策略。特别强调同步I/O与异步I/O的关键区别在于用户进程是否参与I/O过程,而阻塞/非阻塞则关注等待时的线程状态。多路复用技术(如select)通过单次系统

2402_82670467的博客 2183

常用元器件使用方法36:USB转串口芯片CH340X

本文介绍了CH340X芯片的使用方法

snmplink的博客 2837

五种IO模型:操作系统五种IO模型大全

包含操作系统的应用与内核,CPU指令等级,内核空间、用户空间,内核态与用户态;网络IO,磁盘IO,内存IO,异步/同步IO,阻塞/非阻塞IO,以及操作系统的五种IO模型,阻塞IO,非阻塞IO,复用IO(select、poll、epoll)、信号驱动IO模型,异步IO模型等...

緑水長流*z 10万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Linux】五种 IO 模型与非阻塞 IO

本文深入探讨分析了五种I/O模型(阻塞、非阻塞、信号驱动、多路复用、异步I/O)的特点与适用场景,并通过实例代码展示了如何实现非阻塞I/O操作。

You build it, you run it 2902

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

五种 IO 模型与非阻塞 IO

本文介绍了五种IO模型及其核心概念,阐述了不同IO模型的特点与应用场景。

Edison's 小宇宙 4万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

五种网络IO模型

  本文重点在于介绍五种网络IO模型  网络IO,会涉及到两个系统对象,一个是用户空间调用IO的进程或线程,另一个是内核空间的内核系统,比如发生IO操作read时,它会经历两个阶段。  因为在以上两个阶段上各有不同的情况,所以出现了多种网络 IO 模型。  本专栏知识点是通过零声教育的线上课学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以点击链接 C/C++后台高级服务器课程介绍 详细查看课程的服务。  .........

清风 6355

【Linux】五种IO模型

本篇文章会讲解五种IO模型,包括阻塞IO、非阻塞IO、信号驱动IO、多路转接以及异步IO。

℉f的博客 4413

【Linux高级IO】五种IO模型

在信息技术日新月异的今天,Linux操作系统以其强大的稳定性和灵活性,成为了服务器、嵌入式系统以及众多开发者心中的首选平台。而在Linux系统的广阔天地中,I/O(输入/输出)操作无疑是连接用户与硬件、软件之间的桥梁,其性能的优化直接关系到整个系统的响应速度和数据处理能力。

EterNity_TiMe_的计算机学习之路 4483

IO模型 | 常见的五种IO模型介绍

常见IO模型 对于一次 IO 访问,它会经历两个阶段:等待数据准备就绪 (Waiting for the data to be ready);将数据从内核拷贝到进程中 (Copying the data from the kernel to the process)。 举例来说: 读函数:分为等待系统可读和真正的读。 写函数:分为等待网卡可以写和真正的写。 说明: 等待就绪的阻塞是不使用 CPU 的,是在“空等”。而真正的读写操作的阻塞是使用 CPU 的,真正在“干活”,而且这个过程非常快,属于

quwenjing_blog 4552

高级IO(五种IO模型介绍)

本文深入解析了五种I/O模型的特点与差异。首先指出I/O操作慢的本质在于等+拷贝,其中等待外设就绪是主要瓶颈。通过钓鱼的生动比喻,形象展示了五种模型:阻塞I/O(全程等待)、非阻塞I/O(轮询检查)、信号驱动I/O(信号通知)、多路复用(批量监控)和异步I/O(完全委托)。文章详细分析了每种模型的内核交互机制,特别对非阻塞I/O的实现方式(fcntl设置)和错误处理进行了代码示例说明,并对比了各模型的优缺点。最后强调多路复用才是真正提升I/O效率的核心技术,为后续深入讲解select

2302_80105876的博客 1914

五种IO模型详解

在《Unix网络编程》一书中提到了五种IO模型,分别是:阻塞IO、非阻塞IO、多路复用IO、信号驱动IO以及异步IO。下面就分别来介绍一下这5种IO模型的异同。1.阻塞IO模型  最传统的一种IO模型,即在读写数据过程中会发生阻塞现象。  当用户线程发出IO请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程交出CPU。当数据就绪之后,内核会将数据...

小范的博客 4万+
上一篇: 高并发系统搭建:web负载均衡
下一篇: 高并发简单设计
NeilZhy
博客等级 码龄11年 175粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值