首页 > 其他分享 >IO模型

IO模型

时间:2023-09-24 21:01:01浏览次数:38  
标签:异步 调用 函数 模型 阻塞 IO 进程

五种IO模型

1. 阻塞I/O

2. 非阻塞I/O

3. 多路I/O复用

4. 信号驱动I/O

5. 异步I/O

前四种都是同步,只有最后一个是异步I/O

阻塞I/O模型

进程会一直阻塞(不再占有CPU),直到数据拷贝完成。应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,IO函数返回成功指示。

非阻塞I/O模型

非阻塞IO进程反复调用I/O函数(多次系统调用,并马上返回);在数据拷贝的过程中,进程是阻塞的。

当所请求的I/O操作无法完成时,不将进程睡眠,而是返回一个错误。这样让I/O操作函数不断地测试数据是否已经准备好,如果没有准备好就继续测试。直到数据准备好位置,会一直占用CPU;

多路I/O复用

select、poll和epoll三个函数,关键是能实现同时对多个I/O端口进行监听。这几个函数也可以使进程阻塞,但是和阻塞I/O的区别是,他可以同时阻塞多个I/O操作,并且同时对多个读、写操作进行检测,知道有数据可读或可写时,才真正调用I/O操作函数。

信号驱动I/O

安装一个信号处理函数用来接收信号,进程继续运行并且不阻塞。当数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用I/O操作函数处理数据

异步I/O模型

数据拷贝的时候进程无需阻塞。linux中并没有真正意义上的异步I/O。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后(内核),通过状态、通知和回调来通知调用者的输入输出操作。

文件系统的简单操作

df -h /etc

标签:异步,调用,函数,模型,阻塞,IO,进程
From: https://blog.51cto.com/u_15958702/7588621

相关文章

  • Angular 应用程序的 Hydration 概念详解
    Angular应用程序的Hydration概念Hydration概念是Angular应用程序中的一个关键概念,它涉及到Angular框架在客户端渲染(Client-siderendering,CSR)中的运作方式。要深入理解Hydration,首先需要了解CSR和SSR(Server-siderendering,服务器端渲染)之间的基本区别,以及Angular是如何利用Hydra......
  • 金融领域预训练模型用于分类任务,大模型应用参考
    在bert的基础上加了一个分类层:代码实现:output=bert.model.outputoutput=Lambda(lambdax:x[:,0],name='CLS-token')(output)output=Dense(units=num_classes,activation='softmax',kernel_initializer=bert.initializer)(output)model......
  • antd/fusion表格增加圈选复制功能
    背景介绍我们存在着大量在PC页面通过表格看数据业务场景,表格又分为两种,一种是antd/fusion这种基于dom元素的表格,另一种是通过canvas绘制的类似excel的表格。基于dom的表格功能丰富较为美观,能实现多表头、合并单元格和各种自定义渲染(如表格中渲染图形/按钮/进度......
  • Cookie和Session的区别
    在工作中,我们经常会遇到Cookie和Session这两个概念。对于它们的区别,也是面试中被问到的高频题目。因此,在本文中将简要介绍一下Cookie和Session之间的区别。 存储位置:Cookie存储在客户端(浏览器),而Session存储在服务器端。 安全性:cookie不是很安全,别人可以分析存放在本地的cook......
  • Apache IoTDB开发系统之C++原生接口
    安装相关依赖MAC安装Bison:Mac环境下预安装了Bison2.3版本,但该版本过低不能够用来编译Thrift。使用Bison2.3版本会报以下错误: invaliddirective:'%code'使用下面brew命令更新bison版本:brewinstallbisonbrewlinkbison--force添加环境变量:echo'exportPATH="/......
  • crash —— 获取系统NODE、ZONE、SECTION、MEMBLOCK等信息
    crash>kmem-nNODESIZEPGLIST_DATABOOTMEM_DATANODE_ZONES0100925439ffff88e03ffc1000----ffff88e03ffc1000ffff88e03ffc5000......
  • Verdi波形查看transaction+门控时钟+时钟切换+vcs的ucli+斐波那契LFSR和伽罗瓦LFSR
    Verdi波形查看transaction除了以下两个选项以外,+UVM_TR_RECORD+UVM_LOG_RECORD还需要声明+UVM_VERDI_TRACE选项+UVM_VERDI_TRACE=UVM_AWARE+RAL+TLM+MSG+HIER+PRINT否则使用的是VC的环境抓取,而不是Verdi环境。(VerdiTransactiondebug)门控时钟时钟门控如果仅仅使用一个......
  • Oracle process/session/cursor/tx/tm的简单学习
    Oracleprocess/session/cursor/tx/tm的简单学习Oracle的部署模式Oracle安装时有专用模式和共享模式的区别共享模式(Sharedmode):在共享模式下,会话可以同时读取数据库的数据,多个会话可以并发地进行读取操作。这意味着多个会话可以共享相同的数据快照,并且彼此之间不会阻塞。......
  • 一个树状数组求逆序对的进阶 [USACO17JAN] Promotion Counting P
    题面就这样,就是在树上求一个逆序对但是我笨笨地求了对于每一个下属有几个上司能力比他低还一遍就写对了,结果发现看错题目了难得一遍过,但是没有完全过 ......
  • Vmware Workstation 17 开机自启虚拟机
    VMwareWorkstation17中设置虚拟机开机自启动的步骤如下:打开VMwareWorkstation17。在左侧导航栏点击配置自动启动虚拟机。然后选择要自动启动的虚拟机并配置启动顺序,点击确定。设置自动启动服务。打开任务管理器,点击服务,找到VmwareAutostartService,右键,点击开始。找到VMware自......