Linux网络-五种IO模型

news2024/9/23 2:32:13

Linux网络-高级IO

  • 零、前言
  • 一、什么是IO
  • 二、五种IO模型
    • 1、阻塞IO
    • 2、非阻塞IO
    • 3、信号驱动IO
    • 4、IO多路转接
    • 5、异步IO
  • 三、高级IO重要概念
    • 1、同步通信 vs 异步通信
    • 2、阻塞 vs 非阻塞
    • 3、其他高级IO

零、前言

本章主要就Linux网络讲解非常重要的一个话题-高级IO

一、什么是IO

IO是输入input输出output的首字母缩写形式,直观意思是计算机输入输出,它描述的是计算机的数据流动的过程,因此IO第一大特征是有数据的流动

  • 从直观层面去理解IO:

IO是计算机和外设之间的数据流动过程,外设包含两种重要设备(但不限于此):输入设备和输出设备。像鼠标键盘属于输入设备,将人的指令转成“鼠键行为”这种数据传给主机;显示器是输出设备,主机通过运算,把“返回信息”这种数据传给显示器

  • 从计算机架构的角度去理解IO:

从计算机架构上来讲,任何涉及到计算机核心(CPU和内存)与其他设备间的数据转移的过程就是IO。本体就是计算机核心(CPU和内存)。例如从硬盘上读取数据到内存,是一次输入,将内存中的数据写入到硬盘就产生了输出

  • 从编程的角度去理解IO:

IO的主体是其应用程序的运行态,即进程,特别强调的是我们的应用程序其实并不存在实质的IO过程,真正的IO过程是操作系统的事情,这里把应用程序的IO操作分为两种动作:IO调用和IO执行,IO调用什么是应用程序对操作系统IO功能的一次触发,IO执行是操作系统的工作

IO调用的目的是将进程的内部数据迁移到外部即输出,或将外部数据迁移到进程内部即输入。这里,外部数据指非进程空间数据,在编程时,通常讨论的场景是来自外部存储设备的数据,如硬盘、CD-ROM、以及需要socket通信传输的网络数据

  • 以一个进程的输入类型的IO调用为例,它将完成或引起如下工作内容:
  1. 进程向操作系统请求外部数据
  2. 操作系统将外部数据加载到内核缓冲区
  3. 操作系统将数据从内核缓冲区拷贝到进程缓冲区
  4. 进程读取数据继续后面的工作

二、五种IO模型

1、阻塞IO

  • 概念及介绍:
  1. 在进行IO读写时,系统调用会一直进行等待(不做其他的),直到内核将数据准备好,得到数据后才调用返回
  2. 阻塞IO是最常见的IO模型,所有的套接字函数调用默认都是阻塞方式
  • 举例:

钓鱼时,一个人一条杆子,一动不动看着浮漂的动静,看是否有鱼上钩

  • 示图:
image-20220822161746621

2、非阻塞IO

  • 概念及介绍:
  1. 如果内核还未将数据准备好,系统调用仍然会直接返回,并且返回EWOULDBLOCK错误码
  2. 非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符(查看数据是否准备好了),这个过程称为轮询,这对CPU来说是较大的浪费,一般只有特定场景下才使用
  3. 调用返回错误码时,说明此时数据没有准备好,那么就可以选择做一些其他的事情(非阻塞),过一段时间后再次进行访问查看数据是否准备好(轮询)
  • 举例:

钓鱼时,一个人一条杆子,一会看着浮漂,没动静时就刷一会手机,隔段时间再看浮漂的动静

  • 示图:
image-20220822161911481

3、信号驱动IO

  • 概念及介绍:
  1. 信号驱动IO模型并不主动去内核是否将数据准备好,这是并不高效的IO方式
  2. 它赋予关注的事件一套处理机制,在内核将数据准备好的时候,内核主动使用SIGIO信号通知应用程序进行IO操作
  • 举例:

钓鱼时,一个人一条杆子,在杆子上挂一个铃铛,当铃铛响的时候则说明有鱼上够了需要进行处理,没响的时候可以忙其他的事情

  • 示图:
image-20220822162827026

4、IO多路转接

  • 概念及介绍:
  1. 从流程图上看起来和阻塞IO类似,阻塞式等待数据准备就绪,得到数据结果后返回
  2. 实际上最核心在于IO多路转接能够同时等待多个文件描述符的就绪状态
  • 举例:

钓鱼时,一个人多条杆子,关注多条杆子的状态,当有一条杆子有动静时则可以进行相应的处理

  • 示图:
image-20220822171233513

5、异步IO

  • 概念及介绍:
  1. 上述的四种IO模型都是同步IO,和异步IO最大的差别就是看是否需要主动参与到IO读写中去
  2. 异步IO由内核在数据拷贝完成时,再通知应用程序(而信号驱动IO是告诉应用程序何时可以开始拷贝数据)
  • 举例:

钓鱼时,老板雇了一个人,给了他一条杆子,当鱼桶装满时,雇佣的人再通知老板

  • 示图:
image-20220822171819243

三、高级IO重要概念

1、同步通信 vs 异步通信

  1. 同步和异步关注的是消息通信机制
  2. 同步就是在发出一个调用时,在没有得到结果之前,该调用就不返回;但是一旦调用返回,就得到返回值了;换句话说,就是由调用者主动等待这个调用的结果
  3. 异步则是相反, 调用在发出之后,这个调用就直接返回了,所以没有返回结果;换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果;而是在调用发出后, 被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用

注:进程多线程中的同步和互斥与这里的同步通信是完全不同的概念

  • 进程/线程同步:

进程/线程同步也是进程/线程之间直接的制约关系,是为完成某种任务而建立的两个或多个线程,这个线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系,尤其是在访问临界资源的时候

2、阻塞 vs 非阻塞

  1. 阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态
  2. 阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回
  3. 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程

3、其他高级IO

非阻塞IO,纪录锁,系统V流机制, I/O多路转接(也叫I/O多路复用) ,readv和writev函数以及存储映射IO(mmap),这些统称为高级IO

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

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

相关文章

20221211英语学习

今日新词: helplessly adv.无助地;无能为力地 physicist n.物理学家, 物理学研究者 capable adj.有能力的,有才能的;能胜任的;可以…的;容许…的 spokeswoman n.女发言人 production n.产量&#xff1…

卡尔曼滤波应用

卡尔曼滤波器的过程 卡尔曼滤波器的过程分为: 状态方程: xkAxk−1Buk−1ωk−1zkHxkνk这样就得到了状态方程和观测方程的表达式其中xk是状态向量,A是转移矩阵,B是输入转换为状态的矩阵,uk是系统输入,ωk是…

【波段自适应梯度和细节校正:统一遥感融合】

A Unified Pansharpening Model Based on Band-Adaptive Gradient and Detail Correction (基于波段自适应梯度和细节校正的统一全色锐化模型) 利用全色锐化技术将全色(PAN)图像与多光谱(MS)图像融合&…

谈谈Java应用发布时CPU抖动的优化

研究背景 通常情况下应用发布或重启时都存在cpu抖动飙高,甚至打满的现象,这是由于应用启动时,JVM重新进行类加载与对象的初始化,CPU在整个过程中需要进行比平时更多的编译工作。同样,闲鱼的消息系统在重新发布时经常有…

fsQCA+NCA方法的软件操作及注意事项、论文实证分析部分的写作范式

目录前言1 软件操作步骤2 fsQCA方法的详细操作步骤2.1 软件下载2.2 数据的准备2.3 校准点的确定2.4 变量的校准步骤及闪退问题2.5 fsQCA的数据必要性检验(开始一次最后一次)2.6 频数、一致性水平、PRI一致性水平的确定2.6.1 频数的确定2.6.2 一致性水平、…

【中级ECharts技术】前端框架ECharts的dataset 管理数据对数据可视化的高级dataset 管理

dataset 管理数据 提供一份数据。 声明一个 X 轴,类目轴(category)。默认情况下,类目轴对应到声明多个 bar 系列,默认情况下,每个系列会自动对应到 dataset 的每一列。 option = {legend: {},tooltip: {},dataset:

Mac 中 MongoDB 使用

根据 homebrew-brew 官方的解释得知,MongoDB 不再是开源的了,并且已经从 Homebrew中移除 #43770 正是由于 MongoDB 的商业化不太理想,所以它选择了闭源。所以,在它闭源之前的那些 brew 安装方法都会报错了。网上很多的文章都是基…

[附源码]JAVA毕业设计雅博书城在线系统(系统+LW)

[附源码]JAVA毕业设计雅博书城在线系统(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术…

你想要的图片效果(动态实现)

一、前言 没有使用任何框架API,代码或逻辑在html或小程序都适用。主要实现图片随机位置、随机大小、不重叠,在页面上排布;还有扩展功能选定固定图片位置槽数、固定大小、不重叠,在页面上通过添加,图片随机排布。 二、…

我的创作纪念日(4周年)

机缘 回想当初,博主2017年底从北京中石油(沙河总部)辞职,一心想回到自己的家乡成都工作、不想在北京待了,在总部赵总的推荐下来到四川中石油工作(刚好这边有人离职,所谓一个萝卜一个坑&#xf…

C语言入门(二)——常量,变量和表达式

继续Hello World 常量 变量 赋值 表达式 字符类型与字符编码 继续Hello World 前一个章节已经对Hello World程序做各种改动程序做各种改动看编译运行结果,其中有些改动会导致编译出错,有些改动会影响程序的输出,有些改动则没有任何影响…

C++:类的内存布局

文章目录1、虚的含义2、单基继承2.1、单继承2.2、单虚继承2.3、单虚继承 虚函数2.4、测试代码3、多基继承3.1、多继承 虚函数3.2、虚拟多继承 虚函数3.3、测试代码4、菱形继承4.1、菱形继承4.2、菱形虚拟继承4.3、测试代码5、效率分析建议先了解 C 继承与多态的相关知识&…

12.10 二叉搜索树与内部类

目录 一.二叉搜索树 1 概念 2 操作-查找 3.插入 4.删除(难点) 1.cur.leftnull 2.cue.rightnull 3.最复杂的情况 cur.left!null&&cur.right!null 6 性能分析 7 和 java 类集的关系 二.内部类 1.本地内部类 2.实例内部类 1.不可以定义静态 因为静态表示属于…

踩坑记录1——RK3588编译OpenCV

这两天有在板卡上跑代码的需求,拿到了一块RK3588CPU的板子,型号是HINLINK的HK88. 以后记录一下调试这个板子的问题,便于以后查看 0. 基本信息 板卡系统:ArmBian,基于Ubuntu20.04 OpenCV版本:3.4.5 采用方法…

Java项目:SSM公司人力资源管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目为后台管理系统,分为管理员与普通员工两种角色; 管理员角色包含以下功能: 管理员登录,员工账号管理,部门管理,员工…

陆拾肆- 时序数据的特征化

一、前期大数据状况 进行客户域大数据运营时,一般是在当前状态计算客户的行为特征。 如会建立特征为 近7天是否有登录昨天是否有登录近7天销售情况点击主页后是否有点击下层页面哪个页面点击购买总浏览电子产品的次数占访问次数占比不进行商品浏览,只进…

Codeforces Round #772 (Div. 2) D. Infinite Set

翻译: 给定一个数组𝑎,该数组由𝑛个不同的正整数组成。 让我们考虑一个无限整数集𝑆,它包含至少满足以下条件之一的所有整数𝑥: 对于某些1≤𝑖≤𝑛,&#…

微服务框架 SpringCloud微服务架构 微服务保护 33 授权规则 33.2 自定义异常结果

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务保护 文章目录微服务框架微服务保护33 授权规则33.2 自定义异常结果33.2.1 自定义异常结果33.2.2 总结33 授权规则 33.2 自定义异常结…

十种类型电感概述

1、工字型电感 它的前身是挠线式贴片电感,工字型电感是它们的改良, 挡板有效加强储能能力,改变EMI方向和大小,亦可降低RDC。它亦可说是讯号通讯电感跟POWER电感的一种妥协。 工字型电感的缺点,仍是开磁路,有EMI的问题, 另外,噪音的问题比挠线式贴片电感大。 2、色环电感 色环电…

java计算机毕业设计ssm学生学习评价与分析系统8ql42(附源码、数据库)

java计算机毕业设计ssm学生学习评价与分析系统8ql42(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&…