文章目录

  • IO模型
  • 阻塞IO
  • 非阻塞IO
  • 信号驱动IO
  • 多路复用IO
  • 异步IO

IO模型

根据各自的特性不同,IO模型被分为阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路复用IO五类。

最主要的两个区别就是阻塞与非阻塞,同步与异步。

阻塞与非阻塞

阻塞与非阻塞最主要的区别就是程序在等待调用结果时的状态。

  • 阻塞: 为了完成一个功能发起调用,如果不具备完成功能的条件,则调用会一直等待
  • 非阻塞: 为了完成一个功能发起调用,如果不具备完成功能的条件,则立即报错返回

同步与异步

并发模型和I/O模型都有同步/异步的概念:

  • 并发模式中两者最主要的区别就是功能完成的流程是否是顺序化的,

  • I/O模型中两者最主要的区别是注册的是就绪事件还是完成事件,完成I/O操作的是用户程序自身还是内核系统

  • 同步: 功能完成的流程是顺序化的。注册就绪事件,读写事件由自身完成。

  • 异步: 功能完成的流程是不确定的,注册完成事件,读写事件由内核完成。


下列五种IO模型,从前往后处理的效率逐渐增加,对资源的利用也增加充分,但是流程也越来越复杂。

阻塞IO

发起IO调用,如果不具备IO条件,则一直等待直到条件就绪。以 recvfrom 为例:(recvfrom:UDP数据的读写函数)

  • 优点: 流程以及代码实现都非常简单,任务顺序操作。
  • 缺点: 任务处理效率较低,无法充分利用资源。

非阻塞IO

发起一个IO调用,如果不具备IO条件,则立即报错返回(无需等待),继续执行其他命令。通过一个循环来不断发起IO请求,直到条件就绪。

  • 优点: 与阻塞IO相比较来说,利用了等待的时间去做了其他的事情,对资源的利用更加充分
  • 缺点: 与阻塞IO对比,IO调用需要循环发起,流程更加复杂。 并且如果IO条件就绪了,也要等待同一个调用上一轮循环结束后进入当前循环,才能进行处理,这就导致了 IO 不够实时

非阻塞IO可以通过 fcntl函数 设置描述符状态来实现:

void SetNoBlock(int fd)
{int flag = fcntl(fd, F_GETFL, 0);flag |= O_NONBLOCK;fcntl(fd, F_SETFL, flag);
}

信号驱动IO

自定义一个IO就绪的信号,当IO就绪时就发出这个信号。在没有收到信号时,可以继续处理其他事情,一旦收到信号,就会中断当前操作,来优先处理IO事件。程序没有阻塞阶段。

  • 优点: 相较于非阻塞IO,仍具有资源利用更加充分的优势;并且信号到来后就直接强行中断进行处理,更加实时
  • 缺点: 因为需要自定义信号,又要有主控流程也要有信号处理流程,并且还需要考虑信号是否可靠导致的事件丢失情况,流程会更加的复杂。

多路复用IO

用于对大量的IO事件进行监控,能够让用户只针对就绪了指定事件(可读、可写、异常) 的IO进行操作。只针对就绪的描述符进行操作,避免了阻塞,并且提高了效率。

值得一提的是,I/O复用函数对I/O本身的读写操作是阻塞的,他们能提高程序效率的原因在于具有同时监听多个I/O事件的能力。

Linux 下,操作系统提供了三种模型:select模型poll模型epoll模型


异步IO

IO处理的顺序不确定,整个IO的过程(等待 + 数据拷贝)由操作系统来完成而并非用户。程序没有阻塞阶段。

流程:

  1. 自定义一个IO完成信号
  2. 发起异步调用后返回,此时用户可以继续处理其他事情
  3. 系统进行IO事件的等待以及数据拷贝
  4. IO完成后通过信号通知进程IO
  • 优点: 对资源的利用最为充分, 以最高的效率进行任务的处理。
  • 缺点: 资源消耗较高, 流程最为复杂。

IO模型 :阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路复用IO相关推荐

  1. IO:同步,异步,阻塞,非阻塞

    IO - 同步,异步,阻塞,非阻塞 都是老生常谈的东西,多通读几遍,理解透彻! 实际上同步与异步是针对应用程序与内核的交互而言的.同步过程中进程触发IO操作并等待(也就是我们说的阻塞)或者轮询的去查看 ...

  2. 什么是IO多路复用_IO多路复用同步异步阻塞和非阻塞

    转自:http://www.elecfans.com/baike/wangluo/fuyongqi/20180307644141.html 一.什么是socket? 我们都知道unix(like)世界 ...

  3. Socket阻塞与非阻塞,同步与异步、I/O模型

    [原文链接] 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步:       所谓同步,就是在发出一 ...

  4. 【精辟】socket阻塞与非阻塞,同步与异步,select,pool,epool

    socket阻塞与非阻塞,同步与异步 作者:huangguisu 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调 ...

  5. 阻塞和非阻塞、同步和异步 、五种IO模型

    阻塞和非阻塞,同步和异步 1 例子 故事:老王烧开水. 出场人物:老张,水壶两把(普通水壶,简称水壶:会响的水壶,简称响水壶). 老王想了想,有好几种等待方式 1.老王用水壶煮水,并且站在那里,不管水 ...

  6. IO模型(阻塞,非阻塞,多路复用)

    在了解IO模型前,先了解什么叫IO,IO得操作是怎么样的? IO既输入输出,指的是一切操作程序或设备与计算机之间发生的数据传输的过程.它分为IO设备和IO接口两个部分. IO设备:就是指可以与计算机进 ...

  7. IO复用模型同步,异步,阻塞,非阻塞及实例详解

    IO模型介绍 常用的5种IO模型:blocking IOnonblocking IOIO multiplexingsignal driven IOasynchronous IO 再说一下IO发生时涉及 ...

  8. 同步、异步、阻塞、非阻塞IO总结(IO模型总结)

    知识点概念 IO操作概念 同步.异步(IO模型中的概念,并非并发模式中的同步.异步) 阻塞.非阻塞 同步IO模型 异步IO模型 读写(read write)与阻塞和非阻塞 各种IO模型异同对比 IO操 ...

  9. setstate是同步还是异步_谈谈 IO模型:同步、异步、阻塞、非阻塞

    同步/异步.阻塞/非阻塞 说的是一回事儿吗? 同步/异步.阻塞/非阻塞 你能通俗易懂的讲清楚吗? Java 中的 BIO.NIO.AIO 你了解吗? Socket 编程你还会吗? Linux 操作系统 ...

  10. IO模型_阻塞_非阻塞_多路复用

    在了解IO模型前,先了解什么叫IO,IO得操作是怎么样的? IO既输入输出,指的是一切操作程序或设备与计算机之间发生的数据传输的过程.它分为IO设备和IO接口两个部分. IO设备:就是指可以与计算机进 ...

最新文章

  1. ST2-045 For POC
  2. oracle 日期转换成毫秒数,ORACLE:毫秒与日期的相互转换,获取某天的信息
  3. AtomicInteger简介
  4. 声智科技陈孝良:没有好的语音数据收集,语音识别和交互不可能做好
  5. [LeetCode]题解(python):016-3Sum Closest
  6. 本地chrome调试服务器node
  7. ERROR: libopenjp2 = 2.1.0 not found using pkg-config
  8. php如何安装pdflib,使用pdflib及PHP生成pdf文件(文件内容中有中文)的方法
  9. 数独问题流程图_数独-分析、设计、求解思路
  10. Powertoys windows 10第三方桌面分块(分区)工具
  11. 蒲公英超级签名原理(手动做超级签名)
  12. 概率论基础(3)一维随机变量(离散型和连续型)
  13. MTKLOG简介和基本的分析流程
  14. 精选七条关于人工智能的经典语录
  15. CSS,font-family,好看,常用,中文,字体(更新中)
  16. EditPlus设置Java代码格式化
  17. linux tftp 日志,Linux实用工具-tftp
  18. “正大杯”第十三届全国大学生市场调查与分析大赛(专科模拟题)
  19. 机器学习 -- 线性回归(Linear Regression)原理及算法实现
  20. 机器学习数据集读取和预处理

热门文章

  1. ubuntu下IP、DNS配置
  2. Linux操作系统内核启动参数详细解析
  3. ARM指令 LDR 和 ADR的一些区别
  4. centos8 默认nginx路径_CentOS 8系统安装Nginx Web服务器及常见配置过程
  5. python 线程池_老程序员的经验分享:Python 从业十年是种什么体验?
  6. mysql存储引擎的区别_Mysql的两种存储引擎以及区别
  7. 【转】!Dynamics 365 Online通过OAuth 2 Client Credential授权(Server-to-Server Authentication)后调用Web API
  8. 【转】[SharePoint 开发详解] 一个Feature中使用SPGridView的几个Tips
  9. PWN-PRACTICE-CTFSHOW-8
  10. REVERSE-PRACTICE-CTFSHOW-6