Linux - IO

目录

  • 四种典型IO方式
    • 阻塞IO
    • 非阻塞IO
    • 信号驱动
    • 异步IO
  • 多路转接IO
    • select模型
      • 接口

四种典型IO方式

IO:输入输出–过程:等待IO就绪,进行数据拷贝

阻塞:为了完成某功能,发起一个调用,若完成功能条件不具备,则一直等待
非阻塞:发起一个调用,若完成功能条件不具备,则立即报错返回
阻塞与非阻塞:通常用于描述某个接口发起调用后是否能够立即返回
同步:一个功能完成后,才能进行下一个,若不能立即完成则一直等待
异步:发起一个调用,让别人完成具体功能,不用等待功能完成后才能继续推进
同步与异步:通常用于描述功能的完成流程。(外部体现就是功能是否是自己完成的)
异步阻塞与异步非阻塞:
异步阻塞:发起一个调用,让系统完成任务,进程一直等着系统完成任务。
异步非阻塞:发起一个调用,让系统完成任务,进程继续做自己的事情

阻塞IO

阻塞IO:发起IO调用,若IO未就绪(IO条件不具备)则一直等待
优点:流程最为简单
缺点:效率较为低下

非阻塞IO

非阻塞:发起IO调用,若IO未就绪,则立即报错返回
优点:效率相较于阻塞有所提高
缺点:需要循环进行操作,不够实时

信号驱动

信号驱动:自定义IO信号处理,等待IO就绪收到信号打断当前操作进行IO
优点:效率更高,实时性更强
缺点:操作流程更为复杂-需要定于信号处理

异步IO

异步IO:自定义IO信号处理,发起IO调用,调用后立即返回,让系统完成IO,完成后通过信号通知进程。
优点:对于资源利用率极高,效率极高。
缺点:流程最为复杂

多路转接IO

IO多路转接:IO多路复用
作用:针对大量描述符进行IO就绪事件监控,让进程仅仅针对已经就绪了IO事件的描述符进行IO操作,避免了进程对未就绪的描述符进行操作所带来的性能损失或者阻塞。
实现:select、poll、epoll
IO就绪事件:可读,可写,异常

select模型

select模型:针对大量描述符进行IO就绪事件监控
操作流程:
1.定义指定IO事件的描述符集合,将需要监控指定时间的描述符添加到对应集合中
2.发起调用,将需要监控的事件描述符集合拷贝到内核,进行事件监控。若监控超时了都没有描述符就绪则返回,若有描述符就绪了指定监控的事件则返回。在监控调用返回前,都会将描述符集合中没有就绪事件的描述符移除。也就是说,调用返回后,集合中保留的只有就绪的描述符。
3.判断哪个描述符还在哪个集合中,就知道哪个描述符就绪了什么事件,进而进行对应IO操作。

接口

1.定义集合:fd_set rfds, wfds, efds;
2.清空集合:void FD_ZERO(fd_set *set);
3.将描述符添加到集合中:void FD_SET(int fd, fd_set *set);
4.发起监控调用

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

nfds:所有集合中最大的描述符的值+1
readfds / writefds / exceptfds:可读,可写,异常,不监控置空
timeout:监控超时等待时间 struct timeval{tv_usec, tv_sec} 一直等待则置NULL,非阻塞则数据置0
返回值:返回实际就绪的描述符个数;出错返回-1;超时返回0;

5.调用返回后,判断哪个描述符还在集合中确定哪个描述符就绪了什么事件

int FD_ISSET(int fd, fd_set *set);

6.从指定集合中移除指定的描述符

void FD_CLR(int fd, fd_set *set);

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

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

相关文章

String类适合做HashMap的key的原因是什么

在《Java 编程思想》中有这么一句话:设计 hashCode() 时最重要的因素就是对同一个对象调用 hashCode() 都应该产生相同的值。 String 类型的对象对这个条件有着很好的支持,因为 String 对象的 hashCode() 值是根据 String 对象的 内容计算的&#xff…

unity学习(66)——控制器Joystick Pack优化

Joystick Pack这种重力带惯性不利于正常开发。决定进行优化。有一种万事俱备只欠东风的感觉。 源代码如下: 1.在脚本中找到轮盘所输出的方向值 2.把方向的改变值加到鸣人模型身上。 2.1控制器脚本中添加model变量 2.2在unity中赋值 2.3代码中修改位置 using Syst…

C++ [COCI2006-2007#2] ABC

文章目录 一、题目描述[COCI2006-2007#2] ABC题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 二、参考代码 一、题目描述 [COCI2006-2007#2] ABC 题面翻译 【题目描述】 三个整数分别为 A , B , C A,B,C A,B,C。这三个数字…

Python:使用 jionlp和cpca 实现国内地址文本解析

目录 使用 jionlp解析国内地址文本使用 cpca 实现解析国内地址文本总结 使用 jionlp解析国内地址文本 jionlp: 中文 NLP 预处理、解析工具包,准确、高效、易用 github: https://github.com/dongrixinyu/JioNLP文档:http://www.jionlp.com/ 使用示例 …

vue2源码学习01配置rollup打包环境

1.下载rollup相关依赖 npm i rollup rollup-plugin-babel babel/core babel/preset-env --save-dev 2.新建rollup.config.js配置打包选项 //rollup可以导出一个对象,作为打包的配置文件 import babel from rollup-plugin-babel export default {input: ./src/ind…

搭建Hadoop集群(完全分布式运行模式)

目录 一、准备模板机(最小化安装)二、配置一台纯净的模板机修改主机名固定IP地址通过yum安装方式安装必要的软件关闭防火墙且禁止自启修改hosts映射文件创建普通用户 并让他能用sudo命令在/opt下创建software和module完成 三、搭建完全分布式运行模式3.1克隆第一台机器hadoop10…

新能源汽车充电桩站点烟火AI识别检测算法应用方案

新能源汽车作为现代科技与环保理念的完美结合,其普及和应用本应带给人们更加便捷和绿色的出行体验。然而,近年来新能源汽车充电火灾事故的频发,无疑给这一领域投下了巨大的阴影。这不禁让人深思,为何这一先进的交通工具在充电过程…

【算法】acwing基础课笔记01-快排,归并

第一章(基础算法)(一) 以前排序都没怎么自己手写过,这学期终于决定抛弃各种番和游戏好好学一下…记点笔记激励一下自己。 视频知识 00:0000:30快速排序,00:3000&#…

如何防止Terraform在apply时销毁现有的资源

可以在 Terraform 的生命周期中使用 prevent_destroy 配置来指示 Terraform 不要销毁指定的资源。具体示例如下: 在 provider 的配置中添加 lifecycle_rule: provider "aws" {region "us-west-2"lifecycle_rule {prevent_des…

Vue+SpringBoot在线教育考试及管理平台开发(纯原创)后续还在开发,会持续更新

登录页面设计 登录页面设计思路-分为三个角色进行登录&#xff0c;分别为学生&#xff0c;教师&#xff0c;管理员。 前端将登录设计为表单形式&#xff0c;通过选项组件绑定角色参数&#xff0c;向后端传递角色信息&#xff0c;通过表单绑定向后端传递登录者所有信息 <div …

web蓝桥杯真题:灯的颜色变化

代码及注释&#xff1a; // TODO&#xff1a;完善此函数 显示红色颜色的灯 function red() { //将红色图片元素display显示出来&#xff0c;其他隐藏document.querySelector(#defaultlight).style.display nonedocument.querySelector(#redlight).style.display inline-b…

必示科技携手云杉网络发布“智能可观测性联合解决方案”

近日&#xff0c;必示科技与云杉网络携手发布“智能可观测性联合解决方案”&#xff0c;整体方案融合云杉网络DeepFlow产品在可观测性领域、必示科技AIOps产品在运维数据分析领域的深厚技术积淀&#xff0c;完整实现IT系统高质量、高性能、全栈的可观测数据采集、智能监控和智能…

网络: 数据链路层

数据链路层: 数据帧的封装与传输 以太网数据帧 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的;帧协议类型字段有三种值,分别对应IP、ARP、RARP;帧末尾是CRC校验码 以太网 "以太网" 不是一种具体的网络, 而是一种技术标准; 既…

String 作为方法参数是值传递还是引用传递

当将一个String作为方法参数传递时&#xff0c;实际上传递的是String对象的引用的副本&#xff0c;而不是String对象本身。即&#xff0c;在方法内部对String对象进行操作时&#xff0c;操作的是引用的副本&#xff0c;而不会影响原始的String对象。这也意味着&#xff0c;如果…

Cubemx串口配置

1.时钟 2.引脚配置 3.重写printf代码 /* USER CODE BEGIN 1 */ int __io_putchar(int ch){HAL_UART_Transmit(&huart1,(uint8_t *) ch, 1,1000);return ch; } /* USER CODE END 1 */

05分布式事务之CAP理论和BASE理论

分布式事务 项目优化 在网站上加载课程详情信息时如果很慢(排除网速)会影响用户的体验性&#xff0c;为了提高响应速度需要将课程详情信息进行缓存并且将课程信息加入索引库方便全局搜索 Redis中的课程缓存信息是将课程发布表中的数据转为json进行存储Elasticsearch中的课程…

Mysql数据库:索引管理

目录 一、索引的概述 1、索引的概念 2、索引的作用 3、索引的副作用 4、创建索引的原则依据 5、索引优化 6、索引的分类 7、数据文件与索引文件 二、管理数据库索引 1、查询索引 2、创建索引 2.1 创建普通索引 2.2 创建唯一索引 2.3 创建主键索引 2.4 创建组合…

58、服务攻防——应用协议设备KibanaZabbix远控向日葵VNCTeamViwer

文章目录 vnc默认端口&#xff1a;5900 or 5902&#xff0c;hydra支持vnc破解。VNC有三种模式&#xff1a;使用vnc密码、windows密码、无密码。 teamviewer、向日葵都是使用之前爆过漏洞进行测试。 zabbix&#xff1a;监控系统&#xff0c;蓝队部署平台。zabbix页面如下&#…

(PAT乙级) 1084 外观数列 (C语言实现,不要使用strcat)

外观数列是指具有以下特点的整数序列&#xff1a; d, d1, d111, d113, d11231, d112213111, ...它从不等于 1 的数字 d 开始&#xff0c;序列的第 n1 项是对第 n 项的描述。比如第 2 项表示第 1 项有 1 个 d&#xff0c;所以就是 d1&#xff1b;第 2 项是 1 个 d&#xff08;对…

应急响应?流量分析?你会吗?

应急响应 基本思路&#xff1a; 收集信息&#xff1a;收集客户信息和中毒主机信息&#xff0c;包括样本判断类型&#xff1a;判断是否是安全事件&#xff0c;何种安全事件&#xff0c;勒索、挖矿、断网、DoS 等等抑制范围&#xff1a;隔离使受害⾯不继续扩⼤深入分析&#xf…