`

IO 模型

    博客分类:
  • Unix
阅读更多
Unix下可用的5种I/O模型:
  • 1、阻塞式IO
  • 2、非阻塞式I/O
  • 3、I/O复用(select和poll)
  • 4、信号驱动式(SIGIO)
  • 5、异步I/O

一、阻塞式I/O模型
难道这个是传说中的一条道跑到黑?

二、非阻塞式I/O模型
相当于网上订票,不停的刷页面,看有余票没?没有的话不停地刷,刷到有票开始订购。这比喻不知道合适不?
进程把一个套接字设置成非阻塞是在通知内核:当所请求的I/O操作非得把本进程投入睡眠才能完成时,不要使本线程睡眠,而是返回一次错误。
当一个应用进程像这样对一个非阻塞描述符循环调用recvfrom时,我们称之为轮询。应用程序持续轮训内核,以查看某个操作是否就绪。这么做往往耗费大量CPU时间。
进程反复调用recvfrom等到返回成功指示。

三、I/O复用模型
selectpoll
进程受阻于select调用,等到可能多个socket中的任意一个变为可读。
当返回的套接字可读,我们在调用recvfrom把所读的数据报复制到应用进程缓存区。

四、信号驱动式I/O
我们也可以用信号,让内核在描述符就绪时发送SIGIO信号通知我们,我们称这种模型为信号驱动式I/O。
我们首先开启套接字的信号驱动式I/O功能,并通过sigaction系统调用安装一个信号处理函数。该系统调用将立即返回,我们的进程继续工作,也就是说它没有被阻塞。当数据报准备好读取时,内核就为该进程产生一个SIGIO信号。我们随后既可以在信号处理函数中调用recvfrom读取数据报,并通知主循环数据已准备好待处理,也可以立即通知主循环,让它读取数据报。

五、异步I/O
机制是告知内核启动某个操作,并让内核在整个操作完成后通知我们。
这种模型与四信号驱动式的主要区别在于:
信号驱动式是由内核通知我们何时可以启动一个I/O操作。
而异步I/O是由内核通知我们I/O操作何时完成。
阻塞式I/O
发起——阻塞——>完成
非阻塞式I/O
检查、检查...——阻塞——>完成
I/O复用
检查——阻塞——>就绪发起——阻塞——>完成
信号驱动式
通知发起——阻塞——>完成
异步I/O
发起   通知

可见前四种模式最后都是阻塞的。
  • 同步I/O操作导致请求进程阻塞,直到I/O操作完成
  • 异步I/O不导致请求进程阻塞


参考资料:
UNP 卷1
分享到:
评论

相关推荐

    重叠IO模型

    重叠IO模型是一种高效处理输入/输出(I/O)操作的机制,特别是在多任务和并发环境中。这种模型允许操作系统在进行I/O操作的同时处理其他任务,从而提高系统资源的利用率和程序的响应速度。在本文中,我们将深入探讨...

    WinSock 异步IO模型

    WinSock异步IO模型是Windows Socket编程中一种高效的数据传输方式。它允许应用程序在等待数据传输完成时执行其他任务,从而提高系统资源利用率和程序响应性。与传统的同步IO模型不同,异步IO不会阻塞调用线程,而是...

    网络编程IO模型源代码

    本主题聚焦于“网络编程IO模型源代码”,特别是使用C++语言和Windows Socket(Winsock)API的实现。 首先,让我们探讨IO模型的基本概念。IO模型主要有五种:同步阻塞IO、同步非阻塞IO、I/O多路复用、信号驱动IO和...

    IO模型编程实例

    不同的IO模型决定了程序如何等待、处理和响应数据传输。本篇文章将深入探讨四种主要的IO模型:阻塞IO、无阻塞IO、多路复用IO(也称为选择器或I/O多路复用)以及异步IO,结合源码分析来帮助理解它们的工作原理和应用...

    异步IO模型编程实例(纯C语言)

    "异步IO模型编程实例(纯C语言)" 异步IO模型是指在进行IO操作时,不会阻塞当前线程或进程,而是将IO操作交由操作系统或专门的IO处理线程处理,从而提高系统的并发性和响应速度。在Windows平台上,异步IO模型主要...

    ws Socket五种IO模型代码

    WS Socket五种IO模型代码 作为一名IT行业大师,我将根据提供的文件信息,生成相关知识点,以下是详细的解释: WS Socket五种IO模型 在Windows平台上构建服务器应用时,I/O模型是必不可少的考虑因素。Windows操作...

    IO模型与性能分析

    ### IO模型与性能分析 #### 一、基本概念与背景 在探讨IO模型与性能分析之前,我们需要了解一些基础概念: - **时钟周期**:指的是一个时钟脉冲所持续的时间,它是衡量处理器速度的基本单位之一。 - **总线周期**...

    IO模型-完成端口(tcp)

    【标题】:“IO模型-完成端口(tcp)” 在计算机编程中,IO模型是处理输入/输出操作的关键机制。完成端口(IO Completion Port, IOCP)是一种高级的IO模型,尤其适用于多线程服务器应用,如TCP服务器,它能够高效地...

    Linux下IO模型及epoll介绍

    Linux IO模型 epoll 多进程模型 Socket

    Windows Socket 五大IO 模型详解

    Windows socket 编程的模式详解以及基于模式的IO模型详解。这些模型包括s e l e c t(选择)、W S A A s y n c S e l e c t(异步选择)、W S A E v e n t S e l e c t(事件选择)、Overlapped I/O(重叠式I / O)...

    Windows Socket五种IO模型

    Windows 操作系统提供了五种 IO 模型,分别是选择模型(Select)、异步选择模型(WSAAsyncSelect)、事件选择模型(WSAEventSelect)、重叠 IO 模型(Overlapped I/O)和完成端口模型(Completion Port)。...

    IO模型介绍

    ### IO模型介绍 #### 一、IO概述 **IO**,即输入(Input)与输出(Output),是计算机系统中数据交互的基础。数据通过IO类库在内部表示与外部表示之间进行转换,这一过程涉及多种步骤和技术。 #### 二、内部表示与...

    Winsockt_IO模型

    Winsockt_IO模型是Windows操作系统中用于网络编程的重要组件,它提供了一套接口,使得开发者可以利用TCP/IP协议栈进行网络通信。这个模型是基于Windows Socket API(通常简称为Winsock)的,允许应用程序进行高效的...

    linux io 模型

    linux io模型,区分阻塞非阻塞同步异步的概念,从底层理解io。

    IO模型介绍,理解java常见的IO模型

    ### IO模型介绍与Java常见IO模型详解 #### 一、引言 在计算机科学领域,输入输出(Input/Output,简称IO)模型是系统中处理数据传输的关键技术之一。随着互联网的发展,网络通信的需求日益增长,传统的IO模型已经...

    网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    - **BIO(Blocking IO)**:这是Java早期提供的IO模型,特点是简单易用,但效率较低,适用于连接数量较少且对响应时间要求不高的场景。 - **NIO(Non-blocking IO)**:NIO提供了非阻塞的能力,通过选择器可以同时...

    IO模型中的阻塞模型和非阻塞模型

    ### IO模型中的阻塞模型和非阻塞模型 在计算机科学领域中,输入/输出(Input/Output,简称IO)模型对于操作系统与应用程序之间的交互至关重要。根据数据读写操作是否可以立即返回,IO模型通常被划分为阻塞式...

    五种常见的IO模型.pdf

    "五种常见的IO模型" IO 模型是计算机科学中一个基本概念,它描述了计算机系统中输入/输出(IO)操作的处理方式。不同的 IO 模型具有不同的特点和应用场景,了解这些模型对开发高效、可靠的计算机系统非常重要。 一...

    linux 5中 IO模型.pptx

    在Linux操作系统中,有五种主要的IO模型,分别是阻塞IO、非阻塞IO、IO多路复用、信号驱动IO和异步IO。这些模型决定了应用程序如何与硬件进行交互,以获取和处理输入/输出数据。以下是对这五种模型的详细解释: 1. ...

    windows socket 五种IO模型-代码全攻略

    在Windows Socket编程中,了解和掌握不同的I/O(Input/Output)模型是非常关键的,因为它们直接影响到网络通信的效率和程序的响应性。本文将深入探讨五种常见的Windows Socket I/O模型,并提供相应的代码示例,帮助...

Global site tag (gtag.js) - Google Analytics