Unix 5种IO模型的图解分析和比较

面试经典问题 --- IO多路复用 文章目录前言一、I / O 多路复用讲是什么问题 ?1.1 到底什么是 I / O ?1.2 什么是多路复用 ?二、有哪些IO模型 ? 又有什么区别 ?2.1 有哪些IO模型 ?2.2 各种IO模型的区别阻塞IO模型非阻塞IO模型信号驱动IO模型IO复用模型小结: 上述四个模型都是同步模型。异步IO模型总结5种IO模型对比 前言 之前其实有专门去了解过关于 I / O 多路复用的知识,但是前两天在面试UCloud的时候,有问到这方面的问题,发现还是有所欠缺,再次梳理一下。 PS:这是图解算法讲的I.. 阅读详情

 

 

Unix 5种IO模型的图解分析和比较

(转自http://blog.youkuaiyun.com/blueboy2000/archive/2009/08/26/4485874.aspx)

 

Unix下共有五种I/O模型

阻塞I/O

非阻塞I/O

I/O复用(select和poll)

信号驱动I/O(SIGIO)

异步I/O(Posix.1的aio_系列函数)


b.阻塞I/O模型 
应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。 
如果数据没有准备好,一直等待。。。。 
数据准备好了,从内核拷贝到用户空间 
IO函数返回成功指示

untitled1 

c.非阻塞I/O模型 
我们把一个套接口设置为非阻塞就是告诉内核,当所请求的I/O操作无法完成时,不要将进程睡眠,而是返回一个错误。这样我们的I/O操作函数将不断的测试数据是否已经准备好,如果没有准备好,继续测试,直到数据准备好为止。在这个不断测试的过程中,会大量的占用CPU的时间。

untitled2 

d. I/O复用模型 
I/O复用模型会用到select或者poll函数,这两个函数也会使进程阻塞,但是和阻塞I/O所不同的的,这两个函数可以同时阻塞多个I/O操作。而且可以同时对多个读操作,多个写操作的I/O函数进行检测,直到有数据可读或可写时,才真正调用I/O操作函数。 

untitled3

目前Java只能支持到多路复用一级,在这种模式下,在一个线程里面以阻塞的模式监听连接,优点在于不用开过多的线程以阻塞的模式等待连接。

e.信号驱动I/O模型 
首先我们允许套接口进行信号驱动I/O,并安装一个信号处理函数,进程继续运行并不阻塞。当数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用I/O操作函数处理数据。 

untitled4

f.异步I/O模型 
调用aio_read函数,告诉内核描述字,缓冲区指针,缓冲区大小,文件偏移以及通知的方式,然后立即返回。当内核将数据拷贝到缓冲区后,再通知应用程序。 

untitled5

2.几种I/O模型的比较 
前四种模型的区别是第一阶段基本相同,第二阶段基本相同,都是将数据从内核拷贝到调用者的缓冲区。而异步I/O的两个阶段都不同于前四个模型。

untitled6

3.同步I/O和异步I/O 
a.同步I/O操作引起请求进程阻塞,直到I/O操作完成。 
异步I/O操作不引起请求进程阻塞。 
b.我们的前四个模型都是同步I/O,只有最后一个异步I/O模型是异步I/O。

 

Java nio和多路复用

java 1.4 nio提供的select,这是一种多路复用I/O(multiplexed non-blocking I/O)模型,底层是使用select或者poll。I/O复用就是,阻塞在select或者poll系统调用的某一个之上,而不是阻塞在真正的I/O系统调用之上。JDK 5.0 update 9和JDK 6.0在linux下支持使用epoll,可以提高并发idle connection的性能(http://blogs.sun.com/alanb/entry/epoll)。

"BIO是指阻塞IO方式,即读和写必须为同步方式,NIO是指异步读,同步写的方式,AIO是指异步读,异步写的方式。
在网络协议上java对于TCP/IP和UDP/IP均支持,在网络IO的操作上,目前java仅支持BIO和NIO两种方式。"

 

 

电磁兼容标准体系解析:从基础到认证的完整指南 本文系统解析了电磁兼容(EMC)标准体系,从基础概念到认证流程提供完整指南。文章阐述了EMC对于产品可靠性与市场准入的重要性,详细拆解了基础标准、通用标准、产品类标准及认证流程四层结构,并结合5G设备与工业控制等实战案例,为工程师提供了从设计初期到认证测试的高效应用策略。 阅读详情

相关推荐

UOS忘记密码别慌!用LiveCD工具5分钟搞定,附命令行救援模式详细步骤

本文详细介绍了UOS系统密码遗忘时的两种解决方案:图形化LiveCD工具和命令行救援模式。针对普通用户,LiveCD工具提供5分钟快速重置密码的便捷操作;而技术人员可通过命令行深度解析系统分区挂载与密码修改流程。文章还包含安全加固建议,帮助用户预防类似问题发生。

weixin_27032989的博客 588

Unix五种IO模型

一、IO五种模型 阻塞式I/O(Blocking I/O) 非阻塞式I/O I/O复用 信号驱动式I/O(SIGIO) 异步IO(POSIX的aio_系列函数) 一个输入操作通常包括两个不同的阶段: 等待数据准备好(等待数据从网络到达,分组到达时复制到内核某个缓冲区) 从内核向进程复制数据(从内核缓冲区复制到应用进程缓冲区) 套接字的概念: 对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。 (为什么是不同主机,同一台主机不同进程通过命名Socket通信不行吗) 1.1 阻塞式I/O模型

dreambyday 825

USRP X410 MPM版本与主机UHD版本不匹配问题记录与解决

至此大功告成!之前安装软件的坑算是填起来了,再次记录一下,希望能帮到有同样问题的小伙伴~

yanzuwu233的博客 1433

Linux/Unix常见IO模型

应用进程向内核发起 I/O 请求后不再会同步等待结果,而是会立即返回,通过轮询的方式获取请求结果。NIO 相比 BIO 虽然大幅提升了性能,但是轮询过程中大量的系统调用导致上下文切换开销很大。所以,单独使用非阻塞 I/O 时效率并不高,而且随着并发量的提升,非阻塞 I/O 会存在严重的性能浪费。

MrLee的博客 1108

Windows下Delft3D安装全攻略:从申请许可到编译运行(避坑指南)

本文详细解析了Windows系统下Delft3D的完整安装流程,涵盖环境准备、许可获取、源码编译到性能调优的全过程。针对中国用户常见的网络问题和系统兼容性痛点,提供了经过验证的解决方案,特别强调Intel Fortran编译器匹配、环境变量配置等关键步骤,帮助水利工程师高效完成这一水动力学模拟工具的部署。

weixin_28736355的博客 546

点云入门笔记(一):点云数据及获取

点云概念: 点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。

wc19862274581的博客 2万+

深入解析 Unix I/O 的五种模型

阻塞 I/O(Blocking I/O)非阻塞 I/O(Non-blocking I/O)I/O 多路复用(I/O Multiplexing)信号驱动 I/O(Signal-driven I/O)异步 I/O(Asynchronous I/O)

qq_63353796的博客 1067

从URDF到Gazebo:一个完整的ROS2机械臂仿真与运动控制实战指南

本文提供了一个完整的ROS2机械臂仿真与运动控制实战指南。详细讲解了从URDF建模、ROS2 Control配置到Gazebo物理仿真的全流程,重点介绍了如何利用MoveIt2快速搭建高级运动规划系统,并解决实际部署中的常见问题,帮助开发者高效、安全地进行机器人算法验证与开发。

red88的博客 572

Unix的五种IO模型

首先用户态的read方法发起系统调用方法从对应的套接字文件描述符中读取数据 ,内核根据对应的文件描述符去查找socket内核缓冲区中是否有需要的数据,如果没有则会发生read阻塞。当网卡接收到数据,由于网卡绑定了dma控制器,所以不需要cpu的干预,直接将数据copy到socket内核缓冲区当中,拷贝完成后触发软中断的产生,操作系统接收到软中断信号,此时内核将套接字缓冲区中的数据拷贝到用户缓冲区中,此时read阻塞解除。返回一共接收到的字节数。

alwaysfussing的博客 549

C# 进阶:打造WinForms中的动态交互式UserControl

本文深入探讨了如何在C# WinForms中创建动态交互式UserControl,以提升桌面应用的用户体验和代码复用性。通过剖析UserControl生命周期、事件体系,并结合一个可拖拽缩放的分割面板实战案例,详细讲解了鼠标键盘事件处理、自定义绘制、状态管理以及性能优化等核心技巧,帮助开发者封装复杂交互逻辑,打造专业级自定义控件。

weixin_29279153的博客 460

InfiniBand(IB)实战指南:从硬件配置到性能优化

本文是一份详尽的InfiniBand实战指南,涵盖从硬件选型、部署到驱动配置、性能优化的全流程。重点解析了InfiniBand作为AI训练与高性能计算(HPC)核心网络的优势,特别是其支持的RDMA技术如何实现微秒级低延迟。文章提供了硬件匹配、NCCL压测、内核参数调优及在PyTorch分布式训练中启用IB的实操步骤,旨在帮助工程师构建和优化高性能计算集群。

mqtt6iot的博客 578

五种IO模型详解

IO模型,Java字节流、字符流、Netty

galaxyou的博客 2253

华为OD机试真题 新系统【小学英语老师批改作文】

华为OD机试 新系统真题【小学英语老师批改作文】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【小学英语老师批改作文】

qq_45776114的博客 921

Unix5中IO模型的图解分析和比较

Unix下共有五种I/O模型 阻塞I/O 非阻塞I/O I/O复用(select和poll) 信号驱动I/O(SIGIO) 异步I/O(Posix.1的aio_系列函数) b.阻塞I/O模型 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。 如果数据没有准备好,一直等待。。。。 数据准备好了,从内核拷贝到用户空间 IO函数返回成功指示

分享建筑软件的乐趣 4374

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Unix5中IO模型的图解分析和比较。

Unix下共有五种I/O模型阻塞I/O非阻塞I/OI/O复用(select和poll)信号驱动I/O(SIGIO)异步I/O(Posix.1的aio_系列函数)b.阻塞I/O模型 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。 如果数据没有准备好,一直等待。。。。 数据准备好了,从内核拷贝到用户空间 IO函数返回成功指示c.非阻塞I/O模型 我们把一个套接口设置为非阻塞就是告诉内核,当所请求的I/O操作无法完成时,不要将进程睡眠,而是返回一个错误。这样我们的I/O操作函数将不断的测试数据是否已

Outsinre的专栏 1555

计算机控制技术及应用

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

5种IO模型的图解分析和比较

 非阻塞I/O l         I/O复用(select和poll) l         信号驱动I/O(SIGIO) l         异步I/O(Posix.1的aio_系列函数) l         阻塞I/O模型 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。 如果数据没有准备好,一直等待。。。。 数据准备好了,从内核拷贝到用户空,IO函数返回成功指示。 在这种模式下,基本上IO操作都会用一个Work Thread来进行(Java)。   l       

297

IMSL CNL 7.0.0 (x86-64)Crack

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

网络IO模型

前言 在日常开发工作中,经常会看到BIO、NIO、AIO这些名词,但是没有去深入研究过。本文作为一篇个人学习的笔记,记录一下IO的基础知识。 1.Linux网络I/O模型简介 大多网络IO讨论的背景是Linux环境下,因此本文的介绍也主要围绕Linux下的网络IO知识。 此处引用https://zhuanlan.zhihu.com/p/353692786的一张图,是我看过比较易懂的同步与异步、阻塞与非阻塞的介绍。 1.1网络IO的发展阶段 网络IO的发展是随着linux的内核演变而变化,大致

榴莲不利君博客 333

Java IO模型详解

从应用程序的角度来解读一下 I/O,为了保证操作系统的稳定性和安全性,一个进程的地址空间划分为 用户空间(User space) 和 内核空间(Kernel space ) 。平常运行的应用程序都是运行在用户空间,只有内核空间才能进行系统态级别的资源有关的操作,比如文件管理、进程通信、内存管理等等。也就是说,我们想要进行 IO 操作,一定是要依赖内核空间的能力。 用户空间的程序不能直接访问内核空间。当想要执行 IO 操作时,由于没有执行这些操作的权限,只能发起系统调用,请求操作系统帮忙完

FlyingFish868的博客 307

Redis原理篇之网络模型

Redis原理篇之网络模型用户空间和内核空间IO模型阻塞IO非阻塞IOIO多路复用Selectselect模式存在的问题pollepoll对比模式对比 用户空间和内核空间 任何Linux发行版,其系统内核都是Linux。 我们的应用都需要通过Linux内核与硬件交互。 操作系统运行起来后,会占用部分系统资源,例如: 内存资源,cpu资源等. 此时,用户应用程序也同样需要占用这些资源,如果不加以限制,那么会和操作系统争抢资源,导致冲突。 为了避免用户应用导致冲突甚至内核崩溃,用户应用与内核是分离的。 进

m0_53157173的博客 2161

Core Java 收藏

  双重检查锁定及单例模式   Java:单例模式的七种写法   Unix5中IO模型的图解分析和比较   Java 6 JVM参数选项大全(中文版)   java 线程小结   深入 Java 调试体系,第 4 部分: Java 调试接口(JDI)   Java 安全专题      ...

GodIstheBoy 188

文件系统与IO操作:深入解析与Java实践

本文系统探讨了文件系统的理论基础与Java文件操作API。首先阐述了文件系统核心概念,包括文件抽象、目录树结构、路径解析机制和权限模型。随后详细解析了Java IO流体系,涵盖字节流/字符流区别、缓冲区优化策略及文本文件编码处理。在高级实践部分,介绍了目录遍历算法、文件搜索工具实现和大文件处理技术。最后对比了传统IO与现代NIO.2 API,并提供了性能优化方案和资源管理最佳实践。全文通过理论结合代码示例,完整呈现了文件操作的各个关键环节。

2301_79949064的博客 896

Linux内核分析与应用9-设备驱动

Linux支持世界上几乎所有不同功能的硬件设备,导致Linux内核中有一半的代码是设备驱动,且随着硬件的快速升级迭代,设备驱动的代码量也快速增长..为了降低设备多样性带来的Linux驱动开发的复杂度,以及设备热插拔处理,电源管理等,Linux提出了设备模型(Driver Model)只能一个字节一个字节进行读写操作的设备,不能随机读取设备中的某个设备,必须按照先后次序来进行, 字符设备是面向流的设备.常见的字符设备有鼠标,键盘等。一般一个扇区的大小是512字节,但如果是SSD,则为4096个字节.

techdashen的博客 124

深度解读Tomcat中的NIO模型

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33829657的博客 179

cobol中write怎么设置多个逐渐_Java网络编程与NIO详解10:深度解读Tomcat中的NIO模型...

本文转自:http://www.sohu.com/a/203838233_827544本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看https://github.com/h2pl/Java-Tutorial喜欢的话麻烦点下Star哈文章将同步到我的个人博客:http://www.how2playlife.com本文是微信公众号【Java技术江湖】的《...

weixin_31523181的博客 141
上一篇: 介绍一本搜索引擎爬虫方面的好书
下一篇: linux下redis的安装
Java2King
博客等级 码龄18年 221粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值