当前位置: 首页 > news >正文

Linux的IO易错点总结

本文主要记录IO的一些易错操作。 

阻塞IO和非阻塞IO,一般都是针对数据读取的,因为write是主动行为,不存在阻塞这一说。

非阻塞式IO,一般都要配合while轮询来读取数据。 

IO多路复用


当只检测一路IO的时候,和普通IO的作用差不多,只不过,多路复用可以选择阻塞、不阻塞或者超时机制。相对普通的IO操作,最大的不同就是多个超时机制。

参考:Linux驱动之poll机制的理解与简单使用 - andy_fly - 博客园 (cnblogs.com)

当然,IO多路复用主要是在一个进程或者一个线程中读取多路IO数据的场景下使用的。

只有一路的话,read阻塞读取就挺好。

当然,如果想要超时机制,可用poll函数来实现。

异步IO

其实,不管是阻塞IO还是非阻塞IO,最终都需要挂起任务或者占用CPU,此时,任务都不能干别的活。

所以,就肯定需要异步IO的机制。

在 I/O 多路复用中,进程通过系统调用 select()或 poll()来主动查询文件描述符上是否可以执行 I/O 操作,仍然是个主动的过程。而在异步 I/O 中,当文件描述符上可以执行 I/O 操作时,进程可以请求内核为自己发送一个信号。之后进程就可以执行任何其它的任务直到文件描述符可以执行 I/O 操作为止,此时内核会发送信号给进程。所以要使用异步 I/O,还得结合所学习的信号相关的内容,所以异步 I/O 通常也称为信号驱动 I/O。

要使用异步 I/O,程序需要按照如下步骤来执行:
⚫ 通过指定 O_NONBLOCK 标志使能非阻塞 I/O。
⚫ 通过指定 O_ASYNC 标志使能异步 I/O。需要注意的是:在调用 open()时无法通过指定 O_ASYNC 标志来使能异步 I/O,但可以使用 fcntl()函数添加 O_ASYNC 标志使能异步 I/O。
⚫ 设置异步 I/O 事件的接收进程。也就是当文件描述符上可执行 I/O 操作时会发送信号通知该进程,通常将调用进程设置为异步 I/O 事件的接收进程。
⚫ 为内核发送的通知信号注册一个信号处理函数。默认情况下,异步 I/O 的通知信号是 SIGIO,所以内核会给进程发送信号 SIGIO。
⚫ 以上步骤完成之后,进程就可以执行其它任务了,当 I/O 操作就绪时,内核会向进程发送一个 SIGIO
信号,当进程接收到信号时,会执行预先注册好的信号处理函数,我们就可以在信号处理函数中进行 I/O 操作。

 

相关文章:

Linux的IO易错点总结

本文主要记录IO的一些易错操作。 阻塞IO和非阻塞IO,一般都是针对数据读取的,因为write是主动行为,不存在阻塞这一说。 非阻塞式IO,一般都要配合while轮询来读取数据。 IO多路复用 当只检测一路IO的时候,和普通IO的作…...

【Android面试八股文】说一说你对Android中的Context的理解吧

文章目录 一、Context是什么?1.1 主要功能和用途1.2 如何获取 Context 实例?1.3 注意事项二、Context 类的层次结构三、Context的数量四、Context的注意事项五、Android 中有多少类型的 Context,它们有什么区别 ?六、Contextlmpl实例是什么时候生成的,在 Activity 的 oncr…...

AI在音乐创作中的角色:创造还是毁灭?

目录 一、基本情况介绍 二、近期新闻 三、AI生成音乐方面的商业模式 四、人工智能和音乐人可能的合作模式 五、人们如何借助AI来创作音乐 六、人工智能在创意产业引发的伦理道德问题 七、如何平衡技术发展与提高人类创造积极性的关系? 总结 一、基本情况介绍…...

[深入理解DDR] 总目录

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解DDR》 蓝色的是传送门,点击链接即可到达指定文章。 图。 DDR 分类 导论 [RAM] DRAM 导论:DDR4 | DDR5 | LPDDR5 | GDRR6 | HBM 应运而生 运存与内存?内存与存…...

模板方法模式在金融业务中的应用及其框架实现

引言 模板方法模式(Template Method Pattern)是一种行为设计模式,它在一个方法中定义一个算法的框架,而将一些步骤的实现延迟到子类中。模板方法允许子类在不改变算法结构的情况下重新定义算法的某些步骤。在金融业务中&#xff…...

leetcode347.前k个高频元素

leetcode347.前k个高频元素 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2] 示例 2: 输入: nums [1], k 1 输出: [1] 优先队列法 struct hash_…...

c++(二)

1. 类和对象 1.1. 封装 封装的意义 将属性和行为作为一个整体,表现生活中的事物;将属性和行为加以权限控制 public -> 公共权限:类内可以访问,类外也可以访问protected -> 保护权限:类内可以访问,…...

基于PHP的初中数学题库管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的初中数学题库管理系统 一 介绍 此初中数学题库管理系统基于原生PHP开发,数据库mysql,系统角色分为学生,教师和管理员。(附带参考设计文档) 技术栈:phpmysqlphpstudyvscode 二 功能 …...

WDG看门狗

1 WDG 1.1 简介 WDG是看门狗定时器(Watchdog Timer)的缩写,它是一种用于计算机和嵌入式系统中的定时器,用来检测和恢复系统故障。 看门狗就像是一个忠诚的宠物狗,它时刻盯着你的程序,确保它们正常运行。…...

zabbix server client 安装配置

Zabbix Server 采用源码包部署,数据库采用 MySQL8.0 版本,zabbix-web 使用 nginxphp 来实现。具体信息如下: 软件名 版本 安装方式 Zabbix Server 6.0.3 源码安装 Zabbix Agent 6.0.3 源码安装 MySQL 8.0.28 yum安装 Nginx 1.20…...

Unity关于Addressables.Release释放资源内存问题

前言 最近在编写基于Addressables的资源管理器,对于资源释放模块配合MemoryProfiler进行了测试,下面总结下测试Addressables.Release的结论。 总结 使用Addressables.Release释放资源时,通过MemoryProfiler检查内存信息发现加载的内容还在…...

运算放大器(运放)带宽和带宽平坦度

运算放大器带宽和带宽平坦度 电压反馈型运算放大器的带宽 下图1显示电压反馈型运算放大器的开环频率响应。有两种可能:图1A是最常见的情况,高直流增益以6dB/倍频程从极低频率下降至单位增益,也就是典型的单极点响应。相比之下,图…...

npm常用命令使用与事件案例

概述 npm(Node Package Manager)是一个JavaScript编程语言的包管理器,用于Node.js应用程序。它允许用户安装、共享和管理具有重复使用价值的代码(包),这些代码可以是库、工具或应用程序。 npm常用命令详解…...

Spring Boot中的定时任务调度

Spring Boot中的定时任务调度 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨如何在Spring Boot应用中实现定时任务调度,这在实际…...

Hadoop3:MapReduce中的ETL(数据清洗)

一、概念说明 “ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程。ETL一词较常用在数据仓库&#…...

python解锁图片相似度的神奇力量

在这个信息爆炸的时代,图片成为了我们传递信息、表达情感和记录生活的重要方式。然而,面对海量的图片资源,如何快速准确地找到相似的图片,成为了一个亟待解决的问题。现在,让我们为您揭开图片相似度的神秘面纱,带您领略这一创新技术的魅力! 图片相似度技术,就像是一位…...

TensorFlow 的原理与使用

文章目录 TensorFlow 的基本原理1. 计算图(Computation Graph)2. 张量(Tensor)3. 会话(Session)4. 自动微分(Automatic Differentiation) TensorFlow 的使用安装 TensorFlow基本使用…...

[数据库]事务的隔离级别存储引擎

事务的隔离级别 存储引擎 举例 myisam 进行回滚操作后可以发现有一个警告没有行受到影响 memory 比如用于qq的在线离线状态...

使用nvm切换node版本时报错:exit status 1解决办法

作者介绍:计算机专业研究生,现企业打工人,从事Java全栈开发 主要内容:技术学习笔记、Java实战项目、项目问题解决记录、AI、简历模板、简历指导、技术交流、论文交流(SCI论文两篇) 上点关注下点赞 生活越过…...

Kafka~高吞吐量设计

Kafka 之所以能够实现高性能和高速度,主要归因于以下几个关键因素: 分布式架构:Kafka 采用分布式架构,可以水平扩展,通过增加服务器节点来处理更多的流量和数据存储。顺序写入磁盘:Kafka 将消息顺序地写入…...

TwinCAT界面美化指南:3步搞定背景主题切换(附最佳配色方案推荐)

TwinCAT界面美化实战:从主题定制到高效编程的视觉优化 每次打开TwinCAT开发环境,是否觉得默认的灰白色调让人昏昏欲睡?作为工业自动化领域的核心开发工具,TwinCAT的界面美学长期被工程师们忽视。实际上,一个精心调校的…...

WinForm实战:OxyPlot图表控件鼠标悬停显示坐标值(附完整代码)

WinForm实战:OxyPlot图表控件鼠标悬停显示坐标值(附完整代码) 在数据可视化应用中,实时交互功能往往能显著提升用户体验。当开发者需要在WinForm平台快速实现专业级图表时,OxyPlot.WindowsForms.Plot控件凭借其轻量级和…...

从CPU指令到C++代码:拆解 std::atomic fetch_add 在 x86 和 ARM 平台上的底层实现与性能差异

从CPU指令到C代码:拆解 std::atomic fetch_add 在 x86 和 ARM 平台上的底层实现与性能差异 在现代高性能并发编程中,原子操作是构建无锁数据结构和线程安全代码的基石。std::atomic 的 fetch_add 操作看似简单,但其底层实现却因硬件架构差异而…...

Zemax新手避坑指南:从零开始搞定一个F/4的单透镜设计(附完整操作截图)

Zemax光学设计实战:F/4单透镜从入门到精通的完整避坑手册 刚接触Zemax的光学设计新手,面对复杂的界面和繁多的参数设置,往往会感到无从下手。本文将以一个具体的F/4单透镜设计任务为例,手把手带你完成从零开始的设计流程&#xff…...

Base64隐写术逆向工程:从CTF题到自制解密工具(Python实现)

Base64隐写术逆向工程:从CTF题到自制解密工具(Python实现) 1. Base64编码原理与隐写空间 Base64编码的本质是将二进制数据转换为由64个可打印字符(A-Z、a-z、0-9、、/)组成的ASCII字符串。每个Base64字符对应6位二进制…...

Stable Diffusion Lora训练避坑指南:为什么你的模型总是‘丑’?

Stable Diffusion LoRA训练实战:从“翻车”到精通的避坑手册 每次看到别人分享的精致LoRA模型,再看看自己训练出的"克苏鲁风格"作品,是不是有种砸键盘的冲动?别急着放弃——这可能是你训练流程中几个关键环节出了问题。…...

OpenClaw自动化监控:GLM-4.7-Flash实时解析服务器日志告警

OpenClaw自动化监控:GLM-4.7-Flash实时解析服务器日志告警 1. 为什么需要日志自动化监控 每次服务器出现异常时,手动翻查Nginx日志就像在干草堆里找针。上个月我们线上服务遭遇CC攻击,等我从几百兆的access.log里筛选出异常IP时&#xff0c…...

Java轻量级边缘运行时深度解析(OpenJDK GraalVM Substrate VM在ARM64 IoT设备上的实测压测报告)

第一章:Java轻量级边缘运行时概览与技术定位Java轻量级边缘运行时是面向资源受限边缘设备(如工业网关、智能传感器、车载终端)设计的精简型JVM执行环境,它在保持Java语言语义兼容性的同时,显著降低内存占用、启动延迟与…...

半导体制冷片温控实战:H桥PWM驱动电路设计与单片机PID参数整定避坑指南

半导体制冷片温控实战:H桥PWM驱动电路设计与单片机PID参数整定避坑指南 在DIY恒温装置或小型冷热台时,半导体制冷片(帕尔贴)因其紧凑结构和快速温变特性成为理想选择。但真正实现0.5℃级别的精准温控,需要跨越硬件驱动…...

KMS_VL_ALL_AIO:Windows与Office授权管理全场景解决方案

KMS_VL_ALL_AIO:Windows与Office授权管理全场景解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾在重要会议前遭遇Office突然提示"未授权"导致文件无法编辑…...