# IO模型

news/2024/7/24 13:39:18/

IO模型

非阻塞IO

当程序读取硬件数据时,不管硬件数据是否准备好,read()函数不会阻塞,会继续向下执行

程序会不停监测IO事件是否产生,CPU消耗率高

防止进程阻塞在IO函数上,如果要获得有效数据,需要轮循

阻塞IO

当程序读取硬件数据时,如果硬件数据没有准备好,进程会阻塞在read()函数位置,等待硬件数据准备就绪,通过read()函数读取硬件数据后,程序才会向下执行

分为:不可中断休眠状态(D)和可中断休眠状态(S)

常用、简单、效率低,常用于read、write等函数

IO多路复用

需要在一个进程中同时监听多个硬件的数据,使用IO多路复用,IO多路复用实现机制:select、poll、epoll

使用:在用户空间中将监听的事件的文件描述符添加到事件集合中,调用函数进行判断集合中文件描述符对应的硬件数据是否准备就绪,如果没有,则将进程切换到休眠状态(可中断休眠状态);如果有一个或多个硬件数据准备就绪,则将休眠的进程唤醒,对准备就绪的硬件数据进行读写

情景:在使用单进程单线程的情况下,同时处理多个输入输出请求

优点:由于不需要创建新进程和线程,减少了系统的资源开销,减少上下文切换的次数

select:阻塞函数,内核检测指定文件描述符集合中,是否有文件描述符准备就绪

​ 当文件描述符准备就绪后,该函数解除阻塞

​ 当事件产生后,集合中会只剩下触发事件的文件描述符

poll:阻塞函数,内核检测指定文件描述符集合中,是否有文件描述符准备就绪

​ 当文件描述符准备就绪后,该函数解除阻塞

epoll:epoll树、内核链表、epoll_create、epoll_ctl、epoll_wait

区别:select:监听的文件描述符有上限,Linux中默认为1024个,每次都需要遍历整个文件描述符集合

​ poll:监听的文件描述符无上限,每次都需要遍历整个文件描述符集合

​ epoll:监听的文件描述符无上限,可以快速定位就绪的文件描述符,有效避免了遍历过程


http://www.ppmy.cn/news/75234.html

相关文章

Mybatis 缓存

JPA 原理 事务 事务是计算机应用中不可或缺的组件模型,它保证了用户操作的原子性 ( Atomicity )、一致性 ( Consistency )、隔离性 ( Isolation ) 和持久性 ( Durabilily )。 本地事务 紧密依赖于底层资源管理器(例如数据库连接 ),…

【BBQ: A Hand-Built Bias Benchmark for Question Answering 论文精读】

BBQ: A Hand-Built Bias Benchmark for Question Answering 论文精读 InformationAbstract1 Introduction2 Related Work3 The Dataset3.1 Coverage3.2 Template Construction3.3 Vocabulary4 Validation5 Evaluation6 Results7 Discussion8 Conclusion9 Ethical Consideration…

shell sed命令

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 sed 命令sed 编辑器sed 的工作流程的三个过程命定格式常用选项常用操作 实验操作打印内容使用地址删除行替换插入 sed 命令 sed 编辑器 sed是一种流编辑器&#x…

【JavaScript】线程和进程,JavaScript线程,事件队列,事件循环 ,微任务、宏任务

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 进程和线程JavaScript线程事件队列、事件循环微任务、宏任务面试题1面试题2 进程和线程 进程&a…

Ceres简介及示例(8)On Derivatives(Analytic Derivatives)

考虑以下曲线(Rat43) 的拟合问题: y b 1 ( 1 e b 2 − b 3 x ) 1 / b 4 y \frac{b_1}{(1e^{b_2-b_3x})^{1/b_4}} y(1eb2​−b3​x)1/b4​b1​​ 也就是说,给定一些数据 { x i , y i } , ∀ i 1 , . . . , n \{x_i, y_i\},\ \forall i1,... ,n {xi​,yi​}, ∀…

小红书数据分析:如何用ChatGPT输出爆文笔记

ChatGPT的热度依旧不减,随着技术升级,越来越多更高级的玩法被发掘。今天我们就来聊聊,如何用ChatGPT写出小红书风格的文章。 首先,小红书笔记制作分为两个步骤: 1、找选题 2、写小红书风格的笔记 我们用例子说话&a…

SQL执行过程

1. select 语句执行过程 一条 select 语句的执行过程如上图所示 1、建立连接 连接器会校验你输入的用户名和密码是否正确,如果错误会返回提示,如果正确,连接器会查询当前用户对于的权限。连接器的作用就是校验用户权限 2、查询缓存 MySQL…

17.plantUML画类图的语法、组合关系和聚合关系之间的区别

文章目录 plantUML画类图的语法组合关系和聚合关系之间的区别依赖关系和关联关系的区别一个类图语法示例 plantUML画类图的语法 泛化关系就是继承关系 语法解释&#xff1a;<|-- 表示组合&#xff0c;<|-表示继承 表示 public&#xff0c; #表示protect - 表示 private…

新华三发布绿洲平台3.0,五大能力升级,构筑坚实用数底座

当前我国数字经济飞速发展&#xff0c;据中国信息通信研究院发布的《中国数字经济发展研究报告&#xff08;2023年&#xff09;》显示&#xff0c;2022年&#xff0c;我国数字经济规模达到50.2万亿元&#xff0c;同比名义增长10.3%&#xff0c;已连续11年显著高于同期GDP名义增…

阿里国际数字商业持续增长背后,蒋凡正在经历“考验”

出品 | 何玺 排版 | 叶媛 5月18日&#xff0c;阿里巴巴集团发布2023财年第四季度及全年业绩。财报显示&#xff0c;2023财年阿里总收入8686.87亿元&#xff08;合1264.91亿美元&#xff09;&#xff0c;同比增长了2%&#xff1b;经营收入为人民币1003.51亿元合14,612百万美元&…

深入探索SDL游戏开发

前言 欢迎来到小K的SDL专栏第二小节&#xff0c;本节将为大家带来基本窗口构成、渲染器、基本图形绘制、贴图、事件处理等的详细讲解&#xff0c;看完后希望对你有收获 文章目录 前言一、简单窗口二、渲染器三、基本图形绘制1、点2、线3、矩形4、圆和椭圆 四、贴图五、事件处理…

手把手教你接入网站微信支付

文章目录 为何需要接入微信支付&#xff1f;申请微信公众号申请商户号Java SDK代码示例支付流程Native API的使用示例支付结果通知 第三方支付平台相关法规相关链接支付宝支付接入 为何需要接入微信支付&#xff1f; 小摊小贩们在线下交易一般无需接入微信支付&#xff0c;只需…

lwIP更新记01:全局互斥锁替代消息机制

从 lwIP-2.0.0 开始&#xff0c;在 opt.h 中多了一个宏开关 LWIP_TCPIP_CORE_LOCKING&#xff0c;默认使能。这个宏用于启用 内核锁定 功能&#xff0c;使用 全局互斥锁 实现。在之前&#xff0c;lwIP 使用 消息机制 解决 lwIP 内核线程安全问题。消息机制易于实现&#xff0c;…

如何在IDEA中显示时序图

如何在IDEA中显示时序图 有时候&#xff0c;我们想要了解代码的运行过程的时候&#xff0c;想要看到方法的调用流程。 这个时候就希望有一个时序图可以看&#xff0c;但是人工来画时序图太麻烦了&#xff0c;有没有办法在IDEA中直接生成呢&#xff1f; 当然是可以的。 这里…

【SpringMVC框架】--01.简介、入门、@RequestMapping、获取请求参数、域对象共享数据、视图、RestFul

文章目录 SpringMVC1.简介1.1 什么是MVC1.2 什么是SpringMVC1.3 SpringMVC的特点 2.编写HelloWorld2.1 创建maven工程2.2 配置web.xml2.3 创建请求控制器2.4 创建springMVC的配置文件2.5测试HelloWorld2.6总结 3.RequestMapping注解3.1 RequestMapping注解的功能3.2 RequestMap…

内行才知道的大数据分析平台

随着这几年来市场需求的增长以及技术的更新&#xff0c;大数据分析平台越来越多地出现在大家的需求采购单上&#xff0c;但面对大数据分析平台&#xff0c;又有多少人知道他们之间的优势区别&#xff1f;今天就从尽量用小白的语言&#xff0c;聊聊内行眼里的大数据分析平台。 …

get_posts与WP_Query区别与各自的优势-wordpress

在 WordPress 中&#xff0c;get_posts 和 WP_Query 都是用于获取文章&#xff08;post&#xff09;和页面&#xff08;page&#xff09;的函数。它们有一些相似之处&#xff0c;但也有一些区别。 get_posts 是一个简单的函数&#xff0c;用于获取符合特定条件的文章或页面。它…

Systrace系列7 —— Vsync 解读

本文主要是是介绍 Android 中的 Vsync 机制。文章会从 Systrace 的角度来看 Android 系统如何基于 Vsync 每一帧的展示。Vsync 是 Systrace 中一个非常关键的机制,虽然我们在操作手机的时候看不见,摸不着,但是在 Systrace 中我们可以看到,Android 系统在 Vsync 信号的指引下…

F103ZET6使用FSMC和HAL点亮ILI9341

前言 将标准库下的ILI9341驱动移植到使用CubeMX生成的HAL库环境&#xff0c;并成功运行。 一、STM32CubeMX生成框架 &#xff08;一&#xff09;配置RCC、SYS和时钟树 参见常规配置。 &#xff08;二&#xff09;配置FSMC 1、原理图引脚定义 LCD8080接口使用的引脚主要分…

java.util.concurrent.atomic

java.util.concurrent.atomic是Java中的一个包&#xff0c;提供了一组原子操作类&#xff0c;用于在多线程环境下进行原子性操作。这些类可用于实现线程安全的、无锁的操作&#xff0c;保证操作的原子性&#xff0c;避免数据竞争和线程冲突。以下是java.util.concurrent.atomic…