9.6 Linux_I/O_IO模型
基本概念
I/O执行过程与分类:
用户进程中的一个完整I/O分为 "用户进程空间->内核空间->设备空间(磁盘、网卡)" 这两个阶段。
I/O可以分为内存I/O、网络I/O、磁盘I/O
同步和异步是什么:
1、对于线程的请求调用,同步与异步区别在于是否要等这个请求出最终结果
比如read函数,它就是只有读完了数据,存入到了buf中,才会执行下一步,这就是同步
比如aio_read函数,它就是只发送请求数据,不论是否读完,它都会执行下一步,这就是异步。
2、对于多线程,同步与异步区别在于是否要一致、是否要协调
比如生产者与消费者模型,消费者需要等待生产者生产之后再消费,需要一致,这就是同步。
比如两个线程,各干各的事,这两个事情完全没有联系,这就不需要一致,这就是异步。
3、线程内现后两个函数的调用也是一种同步
现后两个函数的调用的意思是第一个函数执行结束,第二个函数才执行。正常的程序都有这种同步
4、异步就是一个请求返回时一定不知道结果,还需要通过其他机制获取结果。
其他机制主要有主动轮询、被动通知这两种。
阻塞与非阻塞是什么:
阻塞、非阻塞与等待消息通知时线程的状态有关。阻塞的侧重点是等待时的状态,同步的侧重点是数据通知机制。
进程生存周期的五个状态:
新建、就绪、运行、阻塞、死亡
进程进入阻塞态的原因:
1、调用sleep休眠
2、调用一个在I/O上被阻塞的操作
3、获取不到锁时
4、等待触发条件
socket中可能进入阻塞的操作:
输入、输出、接收连接accept、外出连接connect
I/O模型
五种I/O模型:
阻塞I/O、非阻塞I/O、多路复用I/O、信号驱动式I/O、异步I/O

阻塞I/O模型:
以recvfrom函数为例。当进程调用recvfrom函数之后,会进入内核空间,在内核空间中去等待数据,这时是死等,直到数据到达并拷贝完成后,才会返回应用进程,此时应用进程解除阻塞。
注意:阻塞I/O的阻塞点主要指的是等待数据到来时是阻塞的。

非阻塞I/O模型:
以recvfrom函数为例。当进程调用recvfrom函数之后,会进入内核空间:当没有数据时,并不会死等而是返回一个错误信息;当有数据时,会将数据拷贝完成,之后返回应用进程(拷贝为死等)。
注意:非阻塞I/O的非阻塞点主要指的是不去等待数据到来,而拷贝数据时依旧有短暂阻塞。

多路复用I/O模型:
以select-recvfrom为例,多路复用I/O分为 "等待多路数据" 和 "拷贝指定路的数据" 两步。
等待多路数据:当应用进程调用select函数后,进入内核空间,这时select根据所配置的参数可能为阻塞等待,也可能是非阻塞等待数据。当多个通道中,有数据存在时, 会返回一个可读条件,这个条件指定了哪一路的数据是存在的。
拷贝指定路的数据:当recvfrom收到select返回的可读条件后,就会去指定的通道拷贝数据。同样在拷贝数据的过程中有短暂阻塞。拷贝数据结束后返回应用进程。

信号驱动式I/O模型:
以sigaction-recvfrom为例,信号驱动式I/O可以分为 "注册信号" 和 "拷贝数据" 这两步。
注册信号:当应用进程调用sigaction函数后,进入内核空间,将信号处理函数注册到内核中,之后返回到应用空间中。此时进程继续正常执行,直到信号产生,内核会向进程发送信号处理的请求。
拷贝数据:当应用进程接收到信号处理请求后,会调用信号处理函数。假设信号处理函数中有一个recvfrom,这是就会进入内核去拷贝数据,短暂阻塞并拷贝完成后返回应用进程。
注意:信号驱动式I/O是同步的,这是因为在拷贝数据过程中是同步的。即:真正发起I/O操作的过程是同步的。

异步I/O模型:
以aio_read为例,当应用进程调用aio_read后,会向内核发送一个读请求,之后就从内核返回到应用进程。这之后,应用进程正常运行,当有数据时,会在内核中自动拷贝。拷贝结束后,内核向应用进程发起信号,应用进程直接使用拷贝好的数据。
注意:异步I/O异步的点是,真正的I/O操作过程,是内核完成的,于此同时应用进程并没有等待它完成,而是异步的做另一件事情。

相关文章:
9.6 Linux_I/O_IO模型
基本概念 I/O执行过程与分类: 用户进程中的一个完整I/O分为 "用户进程空间->内核空间->设备空间(磁盘、网卡)" 这两个阶段。 I/O可以分为内存I/O、网络I/O、磁盘I/O 同步和异步是什么: 1、对于线程的请求调用,同步与异步…...
React 探秘(一):fiber 架构
文章目录 背景React 采用 fiber 主要为了解决哪些问题?性能问题:用户体验问题: 为什么在 React 15 版本中性能会差:浏览器绘制原理:react 15 架构和问题 那么 fiber 怎么解决了这个问题?任务“大”的问题递…...
poi通过在word中写入了表格,通过libreoffice转换成PDF后,word中刚才画的表格宽度无限拉伸问题的解决。
一、复现: poi版本: <poi>3.17</poi><poi-ooxml>3.17</poi-ooxml><poi-ooxml-schemas>3.17</poi-ooxml-schemas><dependency><groupId>org.apache.poi</groupId><artifactId>poi</arti…...
尚硅谷rabbitmq2024 集群篇仲裁队列 第52节 答疑
我们希望创建一个队列,队列分布在各个节点上,仲裁队列很好的解决了这个问题.那么在仲裁队列之前,创建一个队列,队列不是分布在各个节点上的吗? 在RabbitMQ中,默认情况下创建的队列是“普通队列”࿰…...
《Spring Cloud 微服务:构建高效、灵活的分布式系统》
《Spring Cloud 微服务:构建高效、灵活的分布式系统》 一、引言 在当今快速发展的数字化时代,软件系统的规模和复杂性不断增加。为了应对这种挑战,微服务架构应运而生。Spring Cloud 作为构建微服务架构的强大工具集,提供了一系…...
OpenFeign 入门与实战:快速搭建 Spring Cloud 微服务客户端
1. 前言 随着微服务架构的流行,服务之间的通信变得越来越重要。Spring Cloud 提供了一系列工具来帮助开发者构建分布式系统,其中 OpenFeign 是一个轻量级的 HTTP 客户端,它简化了 Web 服务客户端的开发。本文将介绍如何在 Spring Cloud 应用…...
上门按摩系统开发方案源码搭建
上门按摩系统开发方案 一、项目概述 上门按摩系统是一个连接按摩技师和客户的平台,旨在提供便捷、高效的上门按摩服务。通过该系统,客户可以轻松预约合适的按摩技师,并享受个性化的按摩服务。 二、系统功能模块 用户管理模块:…...
【数据结构】宜宾大学-计院-实验四
栈和队列之(栈的基本操作) 实验目的:实验内容:实验结果:实验报告:(及时撰写实验报告):实验测试结果:代码实现1.0:(C/C)【含注释】代码…...
selenium的IDE插件进行录制和回放并导出为python/java脚本(10)
Selenium IDE:Selenium Suite下的开源Web自动化测试工具,是Firefox或者chrome的一个插件,具有记录和回放功能,无需编程即可创建测试用例,并且可以将用例直接导出为可用的python/java等编程语言的脚本。 我们以chrome浏…...
从0到1封装一个image/pdf预览组件
iShot_2024-10-14_16.47.10 目录结构 content.vue <template><div class"no-content-block"><i class"iconfont icondocument large-file" /><div class"text-wrapper">{{ t(__ui__.siPreview.previewSupported) }}<…...
Android build子系统(02)Ninja语法与复杂依赖构建解读
说明:本文将解读Ninja构建系统的基础语法和应用,同时给出一些示例便于理解和学习;给出一个复杂构建的基础demo,通过这个demo的分析理解复杂构建的内在逻辑和build.ninja编写法则;最后扩展之前Android Framework中构建b…...
JavaScript的第三天
目录 JS中的循环,使某些代码重复执行 一、for循环:重复执行某段代码,通常用于计数 1、for的语法结构 2、代码解析 3、代码尝试 4、循环重复相同的代码,可以让用户控制输出的次数(对该变量进行遍历) 5、循环…...
初识git · 有关模型
目录 前言: 有关开发模型 前言: 其实文章更新到这里的时候,我们已经学习了可以满足我们日常生活中的基本需求的指令了,但是为什么要更新本篇文章呢?是因为实际生活中我们对于开发工作,运维工作ÿ…...
基于SpringBoot+Vue+uniapp的海产品加工销售一体化管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
详细视频演示 请联系我获取更详细的视频演示 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…...
解锁机器人视觉与人工智能的潜力,从“盲人机器”改造成有视觉能力的机器人(下)
机器视觉产业链全景回顾 视觉引导机器人生态系统或产业链分为三个层次。 上游(供应商) 该机器人视觉系统的上游包括使其得以运行的硬件和软件提供商。硬件提供商提供工业相机、图像采集卡、图像处理器、光源设备(LED)、镜头、光…...
CORS预检请求配置流程图 srpingboot和uniapp
首先要会判断预检请求 还是简单请求 简单请求 预检请求 #mermaid-svg-1R9nYRa7P9Pll4AK {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1R9nYRa7P9Pll4AK .error-icon{fill:#552222;}#mermaid-svg-1R9nYRa7P9Pll4…...
用Spring AI 做智能客服,基于私有知识库和RAG技术
Java智能客服系统运用RAG技术提升答疑精准度 基于Spring ai 的 RAG(检索增强生成)技术,Java智能客服系统能够利用私有知识库中的信息提供更准确的答疑服务。 它的核心思路是: 首先,将客服QA以Word形式导入到系统中&…...
TemporalBench:一个专注于细粒度时间理解的多模态视频理解的新基准。
2024-10-15,由威斯康星大学麦迪逊分校、微软研究院雷德蒙德等机构联合创建了TemporalBench,它通过大约10K个视频问答对,提供了一个独特的测试平台,用以评估各种时间理解和推理能力,如动作频率、运动幅度、事件顺序等。…...
网友提问:网上申请流量卡不通过怎么办?
网上申请流量卡不通过怎么办?网上办理流量卡不通过,说明你不符合办理此套餐的要求,可以选择其他套餐,或者其他运营商的流量卡申请试试。 我们不管是在京*、淘*、拼**哪个网站申请的流量卡,提交的申请信息都是由运营商…...
JavaWeb 22.Node.js_简介和安装
有时候,后退原来是向前 —— 24.10.7 一、什么是Node.js Node.js 是一个于 Chrome V8 的 JavaScript 运行时环境,可以使 JavaScript 运行在服务器端。使用 Node.js,可以方便地开发服务器端应用程序,如 Web 应用、API、后端服务&a…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
