5种I/O模型

1.Unix环境下有5种I/O模型:

阻塞I/O,非阻塞I/O,信号驱动I/O(select和(e)poll),I/O复用(select和(e)poll),异步I/O(Posix.1的aio_系列函数)。

2.一个I/O分为两个过程:

a. 等

b. 数据搬迁

3.详细一一介绍<形象的以钓鱼比喻>

(1) 阻塞I/O

首先,应用程序调用一个IO函数,导致应用程序阻塞,直到数据准备好。如果数据准备好了,就从内核拷贝到用户空间。如果没有准备好就一直等。

就像是一个人在钓鱼,当没鱼上钩时,就坐在岸边一直等。

(2) 非阻塞I/O

与(1)不同的是,当数据没有准备好时,不要将进程睡眠,而是返回一个错误。如此反复测试,直到数据准备好。测试过程中会占用CPU大量的时间。

就像一个人在钓鱼时,不是坐在岸边什么也不做,一直傻等,而是,一边低头玩手机,一边抬头看看鱼儿有没有上钩。

(3) 信号驱动I/O(select和(e)poll)

我们允许套接口进行信号驱动I/O,并安装一个信号处理函数,进程运行但不阻塞,当数据准备好时,进程收到一个SIGIO信号,可以在信号处理函数中调用I/O。

就像是一个聪明的人,不想自己一直盯着鱼竿,他在鱼竿上系了个铃铛,当铃铛响,就相当于告诉他一个信号——已经有鱼儿上钩了。

(4) I/O复用(select和(e)poll)

此模型会调用select或poll函数,它们会使进程阻塞,但于阻塞I/O不同的是,这两个函数可以同时阻塞多个I/O操作,且可以同时对多个读操作,写操作I/O函数进行检测,直到有数据可读可写,才调用I/O操作函数

就像是一个人拿了好多钓鱼竿钓鱼,在岸边一直巡逻,当有上钩时就拿起鱼竿。

(5) 异步I/O(Posix.1的aio_系列函数)

调用aio_read函数,告诉内核描述字,缓存区指针,缓冲区大小,文件偏移以及通知的方式,然后立即返回。当内核将数据拷贝到缓冲区后,再通知应用程序。

就像一个人雇了另一个人给他钓鱼,另一个人只需告诉他是否钓到鱼,他自己不需了解其中的过程。

4. 几种I/O模型的比较

(1)前四种模型:都是同步的。第一、二阶段基本相同,都是将数据从内核拷贝到调用者的缓冲区。不同的是等的方式不同。

(2)异步I/O的两个阶段都不同于前四个模型。

时间: 2024-10-23 23:06:15

5种I/O模型的相关文章

Unix网络编程中的五种I/O模型_转

转自:Unix网络编程中的的五种I/O模型 下面主要是把unp第六章介绍的五种I/O模型. 1. 阻塞I/O模型 例如UDP函数recvfrom的内核到应用层.应用层到内核的调用过程是这样的:首先把描述符.接受数据缓冲地址.大小传递给内核,但是如果此时 该与该套接口相应的缓冲区没有数据,这个时候就recvfrom就会卡(阻塞)在这里,知道数据到来的时候,再把数据拷贝到应用层,也就是传进来的地址空 间,如果没有数据到来,就会使该函数阻塞在那里,这就叫做阻塞I/O模型,如下图: 2. 非阻塞I/O模

Windows Socket五种I/O模型——代码全攻略(转)

Winsock 的I/O操作: 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序.套接字 默认为阻塞模式.可以通过多线程技术进行处理. 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权.这种模式使用 起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDBLOCK错误.但功能强大.为了解决这个问题,提出了进行I/O操作的一些I/O模型,下面介绍最常见的三种: Windows Socket五种I/O模型——代码全攻

第3章 文件I/O(5)_五种I/O模型

6. I/O处理方式(5种I/O模型) (1)阻塞I/O模型:若所调用的I/O函数没有完成相关的功能就会使进程挂起,直到相关数据到达才会返回.如:终端.网络设备的访问.整个过程分为两个阶段: ①阶段一是等待数据就绪,网络I/O的情况就是等待远端数据陆续抵达:磁盘I/O的情况就是等待磁盘数据从磁盘上读取到内核态内存中. ②阶段二是数据拷贝,出于系统安全,用户态的程序没有权限直接读取内核态内存,因此内核负责把内核态内存中的数据拷贝一份到用户态内存中.理解这两个阶段非常重要,后续I/O模型的演变都是针

linux的五种I/O模型

I/O操作如何完成?由于进程无法直接操作I/O设备,因此必须通过系统调用请求kernel来协助完成I/O操作,内核会为每一个I/O设备维护一个buffer.其工作流程为: 对于输入而言,等待(wait)数据输入至buffer中需要时间,在从buffer复制(copy)到用户进程缓存区中也需要时间.因此,根据等待模式不同,I/O动作可以分为5种模式:linux中的5种I/O模型 1.阻塞I/O模型在这个模型下.当进程执行系统调用时,如果在用户进程空间的缓存区中没有找到相应的数据,则进程将处于阻塞状

网络编程中常见的5种I/O模型

I/O模型 Unix下共有五种I/O模型: 1>:阻塞I/O 2>:非阻塞I/O 3>:I/O多路复用 4>:信号驱动I/O 5>:异步I/O 其中前四种是同步I/O模型,只有第五种是异步的. 同步与异步: 这里的同步和两个实体之间通信中的同步的概念是不一样的,这里的同步是指关于这个I/O中的一系列动作都需要自己来完成,无论你是原地等待事件的发生(阻塞)还是当某个事件已经准备好的时候你去完成后面的的动作(非阻塞)都属于同步. 异步,它是指是调用另一个执行者去完成,当执行者发现

几种支持动作模型格式的比较(MD2,MD5,sea3d) 【转】

最近使用了几种不同的模型格式做人物动作的表现,记录一下优缺点 1) MD2 数据内容: 记录了所有动作顶点数据 数据格式: 二进制 动作文件: 动作文件合并在一个模型文件 文件大小: 动作多时很大 占用内存: 很多 初始化速度: 快 模型与贴图: 分离,需要人工控制贴图加载和处理 2)MD5 数据内容: 骨骼数据记录 数据格式: 字符串 动作文件: 动作文件与原始模型独立 文件大小: 动作多时很大,不过由于是字符串格式, 所以可以用zip压缩获得较大的压缩比 占用内存: 很小 初始化速度: 由于

五种I/O模型简述

在说I/O模型之前,我们先来说说同步,异步,阻塞,非阻塞这四种调用方式的概念: 同步:在发出一个功能调用时,在没有得到结果之前,该调用就不返回,通俗点就是必须一件一件的做事,等这件事做完了才能做下一件事: 异步:异步和同步正好相对,当一个异步过程调用发出后,调用者不能立即得到结果,当该异步调用完成后,通过状态,通知和回调来通知调用者. 阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态之下,cpu不会给线程分配时间片,即线程暂停运行),函数只有在得到结果之后才

网络编程之五种I/O模型

一.概述: 在网络编程中,阻塞.非阻塞.同步.异步经常被提到,下面我先谈以下我所理解的在I/O中的阻塞.非阻塞.同步.异步. 五种I/O模型分别是阻塞式I/O,非阻塞式I/O,信号驱动,I/O复用(这四种是同步I/O),异步I/O. 我来举一个例子来解释这五种I/O模型: 有A,B,C,D,E五个人在钓鱼:A用的是最老式的鱼竿,所以呢,得一直守着,等到鱼上钩了再拉杆.(阻塞式I/O) B呢,它的鱼竿比较新,不怕鱼上钩后把鱼竿拽走,所以他一边看手机,一边时不时看一下鱼竿是否有鱼上钩,有的话就迅速拉

五种I/O模型

1.阻塞I/O     2.非阻塞I/O     3 .I/O复用(select和poll)   4.信号驱动I/O    5.异步I/O select函数I/O复用: select Function The select function determines the status of one or more sockets, waiting if necessary, to perform synchronous I/O. int select( __in int nfds, __in_o