5.2、Unix/Linux上的五种IO模型

news2024/11/19 8:29:05

5.2、Unix/Linux上的五种IO模型

  • 1.阻塞blocking
  • 2.非阻塞non-blocking(NIO)
  • 3.IO复用(IO_multiplexing)
  • 4.信号驱动(signal-driven)
  • 5.异步(asynchronous)
    • ①异步函数介绍

1.阻塞blocking

  • 调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的去检查这个函数有没有返回,必
    须等这个函数返回才能进行下一步动作。
    在这里插入图片描述

2.非阻塞non-blocking(NIO)

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

3.IO复用(IO_multiplexing)

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

4.信号驱动(signal-driven)

  • Linux 用套接口进行信号驱动 IO,安装一个信号处理函数,进程继续运行并不阻塞,当IO事件就绪,进程收到SIGIO 信号,然后处理 IO 事件。
  • 内核在第一个阶段是异步,在第二个阶段是同步;与非阻塞IO的区别在于它提供了消息通知机制,不需要用户进程不断的轮询检查,减少了系统API的调用次数,提高了效率。
    在这里插入图片描述

5.异步(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. */
#endif
	char __glibc_reserved[32];
};

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

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

相关文章

大文件传输的3个重要替代方案

企业文件同步传输是一个广泛的类别。如何与地理位置相距遥远的合作伙伴进行同步、共享和协作呢?在本文中,我们将讨论可用于企业大文件同步传输的3种解决方案。 IBM Aspera Caption Aspera是一种高度可扩展、用户友好的解决方案,用于传输和同…

AI-TestOps —— 软件测试工程师的一把利剑

写在前面软件测试的前世今生测试工具开始盛行AI-TestOps 云平台● AI-TestOps 功能模块● AI-TestOps 自动化测试流程 写在前面 最近偶然间看到一句话:“软件测试是整个 IT 行业中最差的岗位”。这顿时激起了我对软件测试领域的兴趣,虽然之前未涉及过软…

堆排序及常见面试题

⭐️前言⭐️ 本篇文章记录堆排序以及对应的一些练习。 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 🍉博客中涉及源码及博…

硬“核”数字员工:中国核能行业协会携手实在智能,成功举办核能行业数字化实战培训

导语: 近期,中国核能行业协会携手实在智能,成功举办核能行业数字化实战培训,通过理论学习和参与实践,学员们亲手打造出一个个硬“核”数字员工。 十多张表格快速切换,无数串数字在面前跳动,上岗…

数据中台建设:千万级的瀑布式,和十万级的迭代式,你会选择哪一个?

中台十年,再看已成桑田。 最初,为了解决互联网行业快速发展催生出的海量数据累积和碎片化问题,企业开始尝试将数据整合到一个中央平台,以提高数据的使用效率和管理水平,中台建设雏形初现。巨头领跑之下,从…

刷题笔记【7】| 快速刷完67道剑指offer(Java版)

本文已收录于专栏 🌻 《刷题笔记》 文章目录 前言🎨 1、二叉树中和为某一值的路径题目描述思路(深度优先搜索) 🎨 2、复杂链表的复制题目描述思路 🎨 3、二叉搜索树与双向链表题目描述思路 🎨 4…

【蓝桥杯省赛真题20】python二次加密 青少年组蓝桥杯比赛python编程省赛真题解析

目录 python二次加密 一、题目要求 1、编程实现 2、输入输出 二、解题思路

STATS 782 - Numerical Computation

文章目录 一、Simple Graphics1. 用 plot()函数画图 二、Optimization1. 简单求最值2. Interpolation(插值)3. optim()函数 一、Simple Graphics 1. 用 plot()函数画图 x 和 y&…

Linux常用命令——iptables命令

在线Linux命令查询工具 iptables Linux上常用的防火墙软件 补充说明 iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。 补充说明 - 语法选项基本参数 - 命令选项输入顺序工作机制…

【java】CGLIB动态代理原理

文章目录 1. 简介2. 示例3. 原理4. JDK动态代理与CGLIB动态代理区别(面试常问) 1. 简介 CGLIB的全称是:Code Generation Library。 CGLIB是一个强大的、高性能、高质量的代码生成类库,它可以在运行期扩展Java类与实现Java接口&a…

【SAP Abap】X-DOC:SE43 - SAP 用户菜单定义

X-DOC:SE43 - SAP 用户菜单定义 1、菜单结构2、菜单配置3、菜单自定义4、实践演示 1、菜单结构 SAP的菜单栏,支持按层次结构配置,包括以下两个概念: (1)菜单项:具体的一个菜单目录或菜单项&…

爬虫日常-12306自动购票程序

文章目录 前言页面分析代码设计 前言 hello兄弟们,最近在钻研新鲜知识,一不留神没想起来更新。今天我们顺着前面几篇文章完整的写出一篇12306的自动购票软件。 首先把我们已经写完的前期步骤代码再顺一遍 from selenium.webdriver import Chrome from…

阿里大佬都在熬夜肝的Java程序优化笔记,程序性能提高了5倍!

前言 此笔记从软件设计、编码和JVM等维度阐述性能优化的方法和技巧,分享资深架构师Java程序性能优化的宝贵经验,专注于Java应用程序的优化方法、技巧和思想,并深度剖析JDK部分的实现。具有较强的层次性和连贯性,深入剖析软件设计…

Word控件Spire.Doc 【脚注】教程(5):单词脚注的位置与数字格式

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

1.19 从0开始学习Unity游戏开发--扩展编辑器

在之前的篇章里面,我们一直在编辑器里面干活,然后做好资源的编辑和代码开发后,我们可以直接在编辑器内点击那个播放按钮就能真实的把游戏跑起来,但是有时候,我们可能希望在菜单里面加个按钮,这样我们可以直…

C++ STL学习之【容器适配器】

✨个人主页: 夜 默 🎉所属专栏: C修行之路 🎊每篇一句: 图片来源 A year from now you may wish you had started today. 明年今日,你会希望此时此刻的自己已经开始行动了。 文章目录 🌇前言&a…

内存泄漏动态检测(valgrind)

初步判断是否有泄漏 Linux 内存性能优化 —— 高内存使用及内存泄漏排查 比如该文的介绍,需要初步了解top free -h等命令; 主要看free 内存泄漏检测方法: 静态我常用的是cppcheck; 动态的 Linux下内存泄漏定位方法 这个文章…

Node.js 一:基础

1.node.js是什么: 2.node.js的作用: 1.服务器应用:b站.. 2.开发工具类应用:webpack,bable等等 3.桌面端应用:vscode,postman等 这些应用都是基于electron框架开发,electron基于node…

【设计模式】23种设计模式之行为型模式

一、模板方法模式 1、豆浆制作问题 编写制作豆浆的程序,说明如下: 1)、制作豆浆的流程 选材--->添加配料--->浸泡--->放到豆浆机打碎 2)、通过添加不同的配料,可以制作出不同口味的豆浆 3)、选材、浸泡和放…

拥抱还是革命,ChatGPT时代 AI专家给出15条科研生存之道

来源:专知 微信号:Quan_Zhuanzhi 你是学术机构的人工智能研究员吗?你是否担心自己无法应对当前人工智能的发展步伐?您是否觉得您没有(或非常有限)访问人工智能研究突破所需的计算和人力资源?你并不孤单; 我们有同样的感觉。越来越多的人工智能学者不…