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模型
在这个模型下。当进程执行系统调用时,如果在用户进程空间的缓存区中没有找到相应的数据,则进程将处于阻塞状态。当内核从磁盘上读取数据到内核空间的buffer中,并且buffer中的数据复制到用户进程空间的缓存区中这段时间里,进程都将处于阻塞状态。当数据到达用户进程缓存区中,进程就会解除阻塞状态,再有进程将数据返回给客户端。
由于进程处于阻塞状态,因此很少占用cpu,只是等待cpu的响应。因此,这种模型可以提高cpu的使用效率。在这种模型下,如果用户进程空间中依然没有数据,此时将进程唤醒,仍然没有什么用,因此,我们将这种睡眠叫做不可中断睡眠。
其工作原理如图所示:

2、非阻塞I/O模型
在这种模型下。进程执行系统调用,如果在用户进程空间缓存区中没有找到数据,则进程不会处于阻塞状态。而是进程不断的询问用户进程空间缓存区中是否有数据。如果没有,立即返回EWOULDBLOCK,此时由于进程处于非阻塞状态,因此,该进程可以做其他的事情。
在这种模型下,进程需要不断的询问用户进程缓存区中是否有数据,因此,会造成cpu大量的进行上下文切换(进程切换),会大量的消耗cpu。这种模型很少被人使用。
其工作原理如图所示:

3、I/O多路复用
在这种模型下,进程会受阻于select,poll或epoll函数。这两个函数可以阻塞多个I/O操作,可以同时对多个读操作和多个写操作进行检测,直到数据变成可读或可写时,即数据已经加载到buffer中。才真正调用I/O操作函数,然后再将buffer中的数据复制到用户进程缓存区中,然后进程读取其数据,最后返回给客户端。
其工作原理如图所示:

4、信号驱动I/O模型
在这种模型,当内核将数据读取到内核空间中的buffer中时,内核会为进程生成一个SIGIO信号。告知进程数据已准备好了,然后进程执行系统调用,将buffer中的数据拷贝至用户进程缓存区中,最后进程读取相应的数据返回给客户端。
其工作原理如图所示:

5、异步I/O模型
在这种模型下,数据从磁盘加载到buffer中,再将buffer中的数据复制到用户进程缓存区。当数据复制完成后,内核会发生一个信号给进程,这样进程会在用户进程缓存区中读取数据,然后再返回给客户端。
其工作原理如图所示:

异步I/O模型与信号驱动I/O模型的主要区别在于;信号驱动模型是由内核告知何时启动I/O操作;而异步I/O模型是由内核告知I/O操作何时完成。

5种不同的I/O模型比较

同步I/O:synchronous I/O,引起请求进程阻塞,直到I/O完成。在阻塞I/O模型和非阻塞I/O模型中读写操作使用的是同步I/O
异步I/O:asynchronous I/O ,不导致请求进程阻塞。在I/O多路复用模型和异步I/O模型中使用的是异步I/O

水平触发:隔一段时间通知一次,直到进程看到
边缘触发:只发送一次通知,不管进程是否看到

进程和线程的特点
进程特点:
1、对于多进程模型而言,一个进程响应一个请求
2、进程量大,进程切换次数过多
3、每个进程的地址空间是独立,很多空间是重复的数据,所以内存使用效率较低

线程特点:
1、每个线程响应一个请求:
2、线程依然切换:切换较之进程属于轻量级
3、同一个进程的线程可以共享进程的诸多资源,比如打开的文件;
4、对内存的需求较之进程略有下降;
5、快速切换时会带来线程抖动

时间: 2024-07-29 12:14:26

linux的五种I/O模型的相关文章

Linux中五种常见的I/O模型

一般来说,程序进行输入操作有两步:等.搬迁 . 在Linux下,共有五种I/O模型,下面就逐一介绍: 1>.阻塞I/O(使用比较广) 应用程序调用一个I/O函数,如果数据木有准备好,就会导致应用程序阻塞,直到数据准备好了,从内核拷贝到用户空间(进程的缓存),I/O函数返回成功. 如一个进程调用recvform,然后系统调用并不返回直到有数据包到达本地系统,然后完成数据拷贝. 2>.非阻塞I/O(极浪费CPU资源,不常使用) 我们把一个套接口设置为非阻塞,就是告诉内核,当请求的I/O操作无法完成

[]转帖] 浅谈Linux下的五种I/O模型

浅谈Linux下的五种I/O模型 https://www.cnblogs.com/chy2055/p/5220793.html  一.关于I/O模型的引出 我们都知道,为了OS的安全性等的考虑,进程是无法直接操作I/O设备的,其必须通过系统调用请求内核来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer.如下图所示: 整个请求过程为: 用户进程发起请求,内核接受到请求后,从I/O设备中获取数据到buffer中,再将buffer中的数据copy到用户进程的地址空间,该用户进程获取到数

五种I/O模型的学习

来自   http://www.52im.net/thread-1935-1-1.html 4.互联网服务端处理网络请求的原理 首先看看一个典型互联网服务端处理网络请求的典型过程:<ignore_js_op> 由上图可以看到,主要处理步骤包括: 1)获取请求数据,客户端与服务器建立连接发出请求,服务器接受请求(1-3): 2)构建响应,当服务器接收完请求,并在用户空间处理客户端的请求,直到构建响应完成(4): 3)返回数据,服务器将已构建好的响应再通过内核空间的网络 I/O 发还给客户端(5-

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模型——代码全攻

五种I/O模型简述

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

五种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

Unix系统的五种I/O模型

Unix下共有五种I/O模型: 1. 阻塞式I/O  2. 非阻塞式I/O  3. I/O复用(select和poll)  4. 信号驱动式I/O(SIGIO)  5. 异步I/O(POSIX的aio_系列函数)  io请求分两步: 1. 先将数据从存储介质(磁盘,网络等)拷贝到内核缓冲区,此时称为数据准备好,可以被用户应用程序读取. 2. 由用户应用程序拷贝内核缓冲区中的数据到用户缓冲区. ① 阻塞I/O模型            进程一直阻塞,直到数据拷贝完成 我们将函数recvfrom视为

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

如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的.Windows操作系统提供了选择(Select).异步选择(WSAAsyncSelect).事件选择(WSAEventSelect).重叠I/O(Overlapped I/O)和完成端口(Completion Port)共五种I/O模型.每一种模型均适用于一种特定的应用场景.程序员应该对自己的应用需求非常明确,而且综合考虑到程序的扩展性和可移植性等因素,作出自己的选择. 我会以一个回应反射式服务器(与<Windows网络