五种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复用的优势在于,他可以同时监控多个文件描述符

SAP CEWB 高效批量调整工艺路线与BOM的实战指南 本文详细介绍了SAP CEWB工具在批量调整工艺路线与BOM中的高效应用。通过实战案例和操作指南,帮助制造业企业快速掌握批量修改技巧,显著提升工作效率,避免手工操作带来的错误和耗时。特别适合需要频繁更新工艺路线和BOM的企业用户。 阅读详情

相关推荐

RK3566开发板实战:YT8512C百兆网卡调试全记录(附DTS配置避坑指南)

本文详细记录了RK3566开发板上YT8512C百兆以太网卡的调试全过程,包括硬件信号检测、DTS配置优化及常见错误排查。特别针对DTS配置中的关键参数和避坑指南进行了深入解析,为开发者提供实用的调试技巧和经验分享。

weixin_29189381的博客 273

5种IO模型

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

baihehaitangyijiu的博客 450

【全新官方接口】php检测微信域名拦截,检测微信域名被封

你的域名在微信被拦截的3种常见情况 1、域名因违规或有风险被拦截(红色拦截) 2、类似taobao.com,douyin.com这种的恶意竞争式拦截,淘宝、抖音等微信的竞争对手一般都是白色拦截(白色拦截) 3、有一个中间页的拦截,需要多次点击按钮才可以跳转到你的域名的,多是一些新型域名后缀,例如.top .xyz .link后缀,这种情况,备案后可以解决(备案拦截) 通过php get_headers()函数就可以分析到结果 这个下标为6是一个URL,在微信访问后正是这个讨厌的页面! 如果切换为

TANKING,开源开发者! 2877

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

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

Joe's Blog 315

在Jetson Orin (Arm64)上从Ubuntu22.04回退至20.04的完整指南及ROS-noetic适配方案

本文提供了在Jetson Orin (Arm64)设备上将Ubuntu 22.04系统回退至20.04 LTS版本的完整操作指南。针对机器人开发中ROS-noetic对Ubuntu20.04的官方最佳支持,详细阐述了从关键备份、软件源与APT优先级配置、系统降级执行到后续问题排查的全过程,并附带了在Arm64架构上成功安装和验证ROS-noetic的适配方案,旨在为开发者构建稳定可靠的机器人开发环境。

flower的专栏 580

AI训练加速30%!用numactl玩转多显卡绑核的隐藏技巧

本文深入探讨了如何利用Linux系统的numactl工具,通过精确的NUMA绑核策略优化多GPU AI训练性能。文章详细解析了NUMA架构对性能的影响,提供了从拓扑探查、命令实战到多卡脚本化部署的完整指南,并分享了性能验证与常见陷阱,帮助开发者实现高达30%的训练加速。

web99的专栏 449

聊聊Linux 五种IO模型

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

weixin_34235457的博客 1007

智元机器人开源具身仿真框架 Genie Sim 入门教程

GenieSim是AgiBot推出的具身智能仿真框架,提供完整闭环开发管道,包括轨迹生成、模型训练和基准测试。框架支持Docker容器化部署,要求Ubuntu 22.04和NVIDIA硬件环境。主要功能涵盖: 支持12种基准测试任务 提供ADER评估框架 集成UniVLA/RDT等基线模型 支持PICO/键盘遥操作 具备轨迹记录回放功能 提供完整API控制接口 开发者可通过Hugging Face获取场景资产,使用标准化ROS主题与仿真环境交互。框架特别优化了碰撞检测和抓取物理模拟,适用于从简单抓取到复杂操

2506_90492529的博客 2542

五种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

【Bug已解决】Claude Desktop Cowork 报错 Workspace unavailable 解决方案

方案适用场景推荐指数确认虚拟机镜像下载完整性排查的第一步,最基础的前提检查⭐⭐⭐⭐⭐确认虚拟机平台功能已启用Windows 系统功能层面的必要条件⭐⭐⭐⭐⭐重启 CoworkVMService快速尝试恢复服务正常状态⭐⭐⭐⭐完全重启客户端排除临时性状态错乱⭐⭐⭐⭐降级使用文件工具临时替代方案,不阻塞当前工作⭐⭐⭐报错的本质是Cowork 功能依赖的虚拟机管理服务,在 Windows 应用包隔离机制下未能正确定位虚拟机文件的实际存放路径。

博客 6234

19、时间触发通信与时间触发以太网技术解析

本文深入解析了时间触发通信和时间触发以太网(TTEthernet)技术,涵盖了其在实时系统中的应用,特别是安全关键领域如航空航天。文章详细介绍了TTEthernet的通信服务、协议参数化、时钟同步机制、诊断服务、故障隔离方法以及验证工作,并通过示例配置展示了其灵活性和可扩展性。TTEthernet通过引入确定性时间触发通信范式,在同一物理网络上实现了时间触发、速率受限和尽力而为三种流量类别的集成,为分布式实时系统提供了高可靠性和实时性保障。

efc12345678的博客 115

【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

详解AUTOSAR:AUTOSAR架构中的配置文件(拓展篇—7)

查看AUTOSAR代码包时会发现一些这样格式的文件:xxx_PBcfg.c、xxx_Lcfg.c和xxx_Cfg.h,本篇博文讲一讲这几个配置文件的作用和特点。

不脱发的程序猿 2148

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

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

緑水長流*z 10万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

You build it, you run it 2902

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

五种 IO 模型与非阻塞 IO

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

Edison's 小宇宙 4万+

计算机控制技术及应用

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

五种网络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、付费专栏及课程。

余额充值