Unix/Linux上的五种IO模型

a.阻塞 blocking

调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的去检查这个函数有没有返回,必须等这个函数返回才能进行下一步动作

注意:阻塞并不是函数的行为,而是跟文件描述符有关。通过设置文件描述符来控制是阻塞还是非阻塞。 

 

b.非阻塞 non-blockingNIO 

非阻塞等待,每隔一段时间就去检测IO事件是否就绪。没有就绪就可以做其他事。非阻塞I/O执行系统调用总是立即返回,不管事件是否已经发生。若事件没有发生,则返回 -1,此时可以根据 errno 区分这两种情况,对于accept,recv 和 send,事件未发生时,errno 通常被设置成 EAGAIN。

 

c.IO复用(IO multiplexing 

Linux select/poll/epoll 函数实现 IO 复用模型,这些函数也会使进程阻塞,但是和阻塞 IO 所不同的是这些函数可以同时阻塞多个IO 操作。而且可以同时对多个读操作、写操作的 IO 函数进行检测。直到有数据可读或可写时,才真正调用IO 操作函数。

 

d.信号驱动(signal-driven 

Linux 用套接口进行信号驱动 IO,安装一个信号处理函数,进程继续运行并不阻塞,当IO事件就绪,进程收到SIGIO 信号,然后处理 IO 事件。

 上图中的信号处理程序是提前写好的

内核第一个阶段是异步,在第二个阶段是同步;与非阻塞IO的区别在于它提供了消息通知机制,不需要用户进程不断的轮询检查,减少了系统API的调用次数,提高了效率

 e.异步(asynchronous

Linux中,可以调用 aio_read 函数告诉内核描述字缓冲区指针和缓冲区的大小、文件偏移及通知的方式,然后立即返回(用户区就可去做其他事情了),当内核将数据拷贝到缓冲区(提前指定好的)后,再通知应用程序
/* Asynchronous I/O control block. */
struct aiocb
{int aio_fildes; /* File desriptor. */int aio_lio_opcode; /* Operation to be performed. */int aio_reqprio; /* Request priority offset. */volatile void *aio_buf; /* Location of buffer. */size_t aio_nbytes; /* Length of transfer. */struct sigevent aio_sigevent; /* Signal number and value. *//* Internal members. */struct aiocb *__next_prio;int __abs_prio;int __policy;int __error_code;__ssize_t __return_value;#ifndef __USE_FILE_OFFSET64__off_t aio_offset; /* File offset. */char __pad[sizeof (__off64_t) - sizeof (__off_t)];
#else__off64_t aio_offset; /* File offset. */
#endifchar __glibc_reserved[32];
};

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

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

相关文章

力扣题目训练(5)

2024年1月29日力扣题目训练 2024年1月29日力扣题目训练345. 反转字符串中的元音字母349. 两个数组的交集350. 两个数组的交集 II96. 不同的二叉搜索树97. 交错字符串44. 通配符匹配 2024年1月29日力扣题目训练 2024年1月29日第五天编程训练,今天主要是进行一些题训…

【云上建站】快速在云上构建个人网站3——网站选型和搭建

快速在云上构建个人网站3——网站选型和搭建 一、网站选型二、云市场镜像方式一:方式二:1. 进入ECS实例详情页面,点击停止,确保更换操作系统的之前ECS实例处于已停止状态,点击更换操作系统,进行镜像配置。2…

如何写好论文——(5)文献综述的两个基本点

写论文的要点就是要明确我们的研究目标 在我们的引言中要论证我们研究目标的合理性 论证通常要通过文献综述来完成 做好文献综述的两个基本要点如下: 一、有所学 在文献综述中展示与我们现有研究相关的所有知识,有一个全面的了解 包括和我们研究问…

84、介绍:操作系统中内存申请的性能

本节简单的介绍一下在操作系统中的内存申请机制。 有些同学看到这可能会有疑惑,我们不是在学习 AI吗,为什么要介绍内存申请的知识呢? 因为无论是 AI,还是其他的计算学科,都离不开以下几个方面的内容:算法 + 操作系统 + 芯片 + 数据。 AI 作为这几年爆火的学科,不是突…

【LeetCode-435】无重叠区间(贪心)

题目链接 题目简介 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。 注意: 可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。 示例 1: 输入: [ [1,2], [2,3], [3,4…

深入解析可解释性人工智能(XAI):拓展智能决策的透明边界

引言: 近年来,人工智能技术的飞速发展引发了社会各界对其应用和影响的关注。随着AI系统在日常生活中的广泛应用,人们对于这些系统的决策过程提出了更多的疑问。为了增强对AI系统的信任,科学家们努力推动可解释性AI(XAI…

appsmith安装手记:4.Sql server数据库容器安装

appsmith安装好,那就可以看是练练手。 数据当然是来自数据库,那就连接局域网中现成的一台数据库服务器试试,但是连接数据库的时候一直错误。 找到/home/appsmith/backend 目录下的日志,看到了错误: [rootlocalhost bac…

uniapp如何引入uview组件?

目录 1.引入前准备 2.在项目中引入组件 1.mian.is文件 2.uni.scss 文件 3.App.vue文件 4.pages.json 文件 3.测试成功 1.引入前准备 为了方便我们在制作项目的过程中,方便使用模板组件,快速开发。我们可以选择引入组件。 在uni-app中使用uView组件…

day22打卡

day22打卡 235. 二叉搜索树的最近公共祖先 递归法时间复杂度:O(N),空间复杂度:O(N) class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root->val > p->val && ro…

蓝桥杯《剪格子》

题目描述 历届试题 剪格子 时间限制:1.0s 内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数。 10 1 52 20 30 1 1 2 3 我们沿着图中的星号线剪开,得到两个部分,每个部分…

基于SSM的高校班级同学录网站设计与实现(有报告)。Javaee项目,ssm项目。

演示视频: 基于SSM的高校班级同学录网站设计与实现(有报告)。Javaee项目,ssm项目。 项目介绍: Javaee项目,采用M(model)V(view)C(controller&…

双非本科准备秋招(12.2)—— 力扣栈与队列

复习一下栈和队列的基础知识&#xff0c;刷几道题上上手。 1、102. 二叉树的层序遍历 广度优先遍历嘛&#xff0c;每次拓展一个新结点&#xff0c;就把新结点加入队列&#xff0c;这样遍历完队列中的元素&#xff0c;顺序就是层序遍历。 class Solution {public List<Lis…

我国个体工商户达1.24亿户,支撑近3亿人就业

官媒报道截至2023年底&#xff0c;全国登记在册个体工商户1.24亿户&#xff0c;占经营主体总量的67.4%&#xff0c;支撑近3亿人就业。 什么概念&#xff1f;我帮大家理解一下&#xff0c;2024年了&#xff0c;现在中国5个人里面就有一个人不用上班&#xff0c;而是自己当起了老…

Linux 内核学习1. 编译并启动一个最小化系统

Linux 内核学习1. 编译并启动一个最小化系统 一、Linux内核简介1. Linux 内核介绍2. Linux内核主要的作用 二、编译内核主要的步骤三、编译过程1. 准备环境2. 安装编译工具和依赖项3. 下载源码4. 配置内核配置功能选项命令行配置图形化配置默认配置 5. 编译内核6. 构建轻量化工…

C语言-算法-树状数组

统计和 题目描述 给定一个长度为 n ( n ≤ 100000 ) n(n\leq 100000) n(n≤100000)&#xff0c;初始值都为 0 0 0 的序列&#xff0c; x ( x ≤ 100000 ) x(x\leq 100000) x(x≤100000) 次的修改某些位置上的数字&#xff0c;每次加上一个数&#xff0c;然后提出 y ( y ≤…

mysql 允许其他ip访问

1.改表法。 可能是你的帐号不允许从远程登陆&#xff0c;只能在localhost。这个时候只要在localhost的那台电脑&#xff0c;登入mysql后&#xff0c;更改 “mysql” 数据库里的 “user” 表里的 “host” 项&#xff0c;从"localhost"改称"%" //执行以下…

#翻转牛群

题目描述 农夫约翰偶尔会遇到无聊的青少年&#xff0c;他们晚上去他的农场&#xff0c;把奶牛们弄翻。一天早上&#xff0c;他醒来发现事情又发生了——他的 N∗N 头奶牛排列成了一个完美的 N∗N 方阵&#xff08;1≤N≤10)&#xff0c;但他发现其中一些现在已经被弄翻了&…

学习使用Flask模拟接口进行测试

前言 学习使用一个新工具&#xff0c;首先找一段代码学习一下&#xff0c;基本掌握用法&#xff0c;然后再考虑每一部分是做什么的 Flask的初始化 app Flask(__name__)&#xff1a;初始化&#xff0c;创建一个该类的实例&#xff0c;第一个参数是应用模块或者包的名称 app…

免费使用支持离线部署使用的 txt2video 文本生成视频大模型(Text-to-Video-Synthesis Model)

免费使用支持离线部署使用的 txt2video 文本生成视频大模型(Text-to-Video-Synthesis Model)。 文本生成视频大模型(Text-to-Video-Synthesis Model)是一种基于深度学习技术的人工智能模型&#xff0c;它可以将自然语言文本描述转换为相应的视频。即通过输入文本描述&#xff…

MySQL 函数参考手册(MySQL 数值函数)

目录 MySQL ABS() 函数 MySQL ACOS() 函数 MySQL ASIN() 函数 MySQL ATAN() 函数 MySQL ATAN2() 函数 MySQL AVG() 函数 MySQL CEIL() 函数 MySQL CEILING() 函数 MySQL COS() 函数 MySQL COT() 函数 MySQL COUNT() 函数 MySQL DEGREES() 函数 MySQL DIV 函数 My…