i/o模型

bzaq bzaq     2023-01-15     672

关键词:

Unix下有5种可用的I/O模型:

  • 阻塞式I/O
  • 非阻塞式I/O
  • I/O复用(select、poll、epoll)
  • 信号驱动式I/O(SIGIO)
  • 异步I/O  

(1) 阻塞式I/O模型

  像scanf, cin这些就是最简单的阻塞式I/O, 在正确读入/接收到数据之前, 进程被阻塞, 无法继续向下运行, 只有当数据到达或者发生错误时才返回。在网络编程中, 常见的阻塞式I/O有read, recv, accept等

(2) 非阻塞式I/O模型

  进程把一个套接字设置成非阻塞是再通知内核: 当所有的I/O操作非得把本进程投入睡眠才能完成时, 不要把本进程投入睡眠, 而是返回一个错误。

技术分享图片

如上图中, 前三次调用recvfrom时没有数据可返回, 因此内核转而立即返回一个EWOULDBLOCK错误, 第四次调用recvfrom时已有一个数据报准备好, 他被复制到应用进程缓冲区, 于是recvfrom成功返回。当一个进程像这样对一个非阻塞描述符循环调用recvfrom时, 我们称之为轮询(polling)。这么做往往耗费大量CPU时间, 通常是在专门提供某种功能的系统中才有。

(3) I/O复用模型

  我们可以通过调用select, poll或者epoll, 使阻塞不在真正的I/O系统调用上, 比如select, 他同时管理多个套接字, 等待数据包套接字变为可读, 然后返回可读条件, 之后才在调用真正的I/O系统调用

技术分享图片

 

(4) 信号驱动I/O模型

  这种模型是让内核在描述符就绪时发送SIGIO信号通知我们, 我们可以通过sigaction安装一个信号处理函数, 当接收到SIGIO信号时, 在处理函数中直接读取数据, 或者通知主循环让他读取数据。这种模型的优势在于等待数据报到达期间进程不被阻塞, 主循环可以继续执行, 只需等待来自信号处理函数的通知

(5) 异步I/O模型

  这种I/O模型与信号驱动模型主要区别在于: 信号驱动模型是内核通知我们何时可以启动一个I/O操作, 而异步模型是内核通知我们何时完成了I/O操作

 

web服务与nginx-nginx的i/o模型

WEB服务与NGINX(2)-NGINX的I/O模型目录WEB服务与NGINX(2)-NGINX的I/O模型1.linuxI/0模型及在NGINX中的应用1.1I/O模型概述1.2系统I/O模型1.3网络I/O模型1.3.1同步阻塞I/O模型1.3.2同步非阻塞I/O模型1.3.3IO多路复用模型1.3.4信号驱动IO模型1.3.5异步... 查看详情

unixi/o与javai/o(代码片段)

文章目录背景UnixI/O模型阻塞I/O模型非阻塞I/O模型I/O多路复用模型I/O多路复用技术信号驱动I/O模型异步I/O模型五种I/O模型的比较JavaIO模型IO(面向流的,也叫BIO)NIOBufferChannelSelectorNIO2(AIO)Netty背景UnixI/O模型I/O... 查看详情

unixi/o与javai/o(代码片段)

文章目录背景UnixI/O模型阻塞I/O模型非阻塞I/O模型I/O多路复用模型I/O多路复用技术信号驱动I/O模型异步I/O模型五种I/O模型的比较JavaIO模型IO(面向流的,也叫BIO)NIOBufferChannelSelectorNIO2(AIO)Netty背景UnixI/O模型I/O... 查看详情

i/o模型介绍(代码片段)

...内核缓冲区复制到用户空间的进程的内存中,时间较短I/O模型Linux下的五种I/O模型1)阻塞I/O(blockingI/O)2)非阻塞I/O(nonblockingI/O)3)I/O复用(select和p 查看详情

网络i/o模型--05多路复用i/o(代码片段)

多路复用I/O模型在应用层工作效率比我们俗称的BIO模型快的本质原因是,前者不再使用操作系统级别的“同步I/O。”模型。在Linux操作系统环境下,多路复用I/O模型就是技术人员通常简称的NIO技术。多路复用I/O目前具体的实现... 查看详情

i/o模型简述

...接下来的一章中,我将通过举例的方式向大家介绍五种I/O模型。如果大家是第一次了解I/O模型方面的知识,理解起来会有一定的难度。所以在看文章的同时,我更建议大家动手去实现这些I/O模型,感觉会不一样。好了,下面咱们... 查看详情

大白话五种io模型(代码片段)

目录大白话五种IO模型一、I/O模型介绍二、阻塞I/O模型2.1一个简单的解决方案2.2该方案的问题2.3改进方案2.4改进后方案的问题三、非阻塞I/O模型3.1非阻塞I/O实例四、多路复用I/O模型4.1select/poll模型4.1.1select网络I/O模型4.1.2select监听f... 查看详情

i/o模型

select 查看详情

通信模型socket

...讲,阻塞I/O、非阻塞I/O、复用I/O、信号驱动I/O都是同步IO模型,异步I/O就是异步IO,同步I/O向应用程序通知的是I/O就绪事件,异步I/O向应用程序通知的是I/O完成事件。同步和异步:都是针对应用程序和操作系统之间交互而言的。 查看详情

第3章文件i/o_五种i/o模型

6.I/O处理方式(5种I/O模型)(1)阻塞I/O模型:若所调用的I/O函数没有完成相关的功能就会使进程挂起,直到相关数据到达才会返回。如:终端、网络设备的访问。整个过程分为两个阶段:  ①阶段一是等待数据就绪,网络I/O的... 查看详情

八网络服务i/o模型

8.1、四种的I/O模型 在操作系统中,进程无法直接操作I/O设备,其必须通过系统调用请求kernel来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer。进程与I/O之间的通信模型如图所示。650)this.width=650;"src="https://s2.51cto.com/wy... 查看详情

操作系统io模型

操作系统IO模型声明:如下内容是根据APUE和mycat两本著作中关于I/O模式的一些内容加上自己的一些理解整理而成,仅供学习使用。本节内容UNIX下可用的五种I/O模型三种I/O模型Reactor和Proactor模式UNIX下可用的五种I/O模型阻塞式I/O非... 查看详情

简单理解i/o模型

服务端I/O:  I/O在计算机中指Input/Output,IOPS(Input/OutputPerSecond)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请... 查看详情

网络i/o模型--5种常见的网络i/o模型

...据,经过拷贝过程取得数据。  5种常见的网络I/O模型blockingI/O --阻塞类型的I/OnonblockingI/O--非阻塞类型的I/O I/OMultiplexing--多路复用型I/O  Signal-DrivenI/O--信号驱动型I/O AsynchronousI/O--异步I/O      1.blo... 查看详情

linux中的五种i/o模型(代码片段)

文章目录一、阻塞I/O模型二、非阻塞I/O模型三、I/O复用模型1.select2.poll3.epoll四、信号驱动I/O模型五、异步I/O模型一、阻塞I/O模型进程读取数据时会一直阻塞等待,等待内核通过系统调用对数据进行处理,直到数据包到达... 查看详情

java基础:i/o多路复用模型及linux中的应用(代码片段)

IO多路复用模型广泛的应用于各种高并发的中间件中,那么区别于其他模式他的优势是什么、其核心设计思想又是什么、其在Linux中是如何实现的?I/O模型I/O模型主要有以下五种:同步阻塞I/O:I/O操作将同步阻塞用户线程同步非... 查看详情

socket编程中五种i/o模型介绍

unix下可用五种I/O模型,分别是:    1、阻塞式I/O    2、非阻塞式I/O    3、I/O复用(select、poll)    4、信号驱动式I/O(SIGIO)    5、异步I/O 查看详情

winsock异步i/o模型-3

...dI/O)    在Winsock中,重叠I/O(OverlappedI/O)模型能达到更佳的系统性能,高于之前讲过的三种。重叠模型的基本设计原理便是让应用程序使用一个重叠的数据结构(WSAOVERLAPPED),一次投递一个或多个WinsockI/O请求。... 查看详情