原先对于IO模型的认识总是很模糊,前段时间系统的学习了一下,分享出来,希望对看到的人有帮助。
UNIX网络编程中,将IO模型划分为5种:
(1)阻塞IO (2)非阻塞IO (3)信号驱动IO (4)IO复用 (5)异步IO
1、IO操作的2个步骤:
以上5种IO操作都分成了两个步骤:发起IO请求和实际IO操作。
(1)发起IO请求:IO请求一般需要请求特殊资源(如磁盘、RAM、文件),当资源被上一个使用者使用没有被释放时,IO请求就会被阻塞,直到能够使用这个资源。
(2)实际IO操作:真正进行数据接收。
2、IO分类:
步骤1(发起IO请求):分为阻塞IO和非阻塞IO,区别(看发起IO请求是否阻塞进程):
应用程序调用后,不能立即返回的称为阻塞IO:即资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超时)。
能立即返回的称为非阻塞IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用。
步骤2(实际IO操作):分为同步IO与异步IO,区别(看实际IO操作是否阻塞进程):
在将数据从内核拷贝到用户空间时,将数据拷贝到应用缓冲区期间是否阻塞。
也就是说,如果实际IO读写阻塞请求进程(应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败),那么就是同步IO。
如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你(应用发送或接收数据后立刻返回,数据写入OS缓存,由OS完成数据发送或接收,并返回成功或失败的信息给应用),那么就是异步IO。
综上所述,前4种属于同步IO,最后一种才是异步IO。虽然(2)(3)(4)种IO是非阻塞IO,但其实也只是同步非阻塞,不能算异步。
附:UNIX网络编程一书中的截图(来源于网络)
阻塞IO:
非阻塞IO:
IO复用:
信号驱动IO:
异步IO:
5种IO模型比较:
相关推荐
在IT领域,网络编程是构建分布式系统和网络应用的基础,而理解不同的IO(输入/输出)模型对于优化网络服务性能至关重要。...通过分析提供的“IO模型源代码”,可以更深入地学习这些概念,从而提升网络编程技能。
### IO模型与性能分析 #### 一、基本概念与背景 在探讨IO模型与性能分析之前,我们需要了解一些基础概念: - **时钟周期**:指的是一个时钟脉冲所持续的时间,它是衡量处理器速度的基本单位之一。 - **总线周期**...
在UNIX操作系统中,I/O(Input/Output)是系统与外部设备交互的关键机制。这篇文档“UNIX IO.doc”深入探讨了UNIX下输入输出的基本原理和使用技巧,这...这份“UNIX IO.doc”文档无疑是深入学习这一主题的宝贵资源。
WS Socket五种IO模型代码 作为一名IT行业大师,我将根据提供的文件信息,生成相关知识点,以下是详细的解释: WS Socket五种IO模型 在Windows平台上构建服务器应用时,I/O模型是必不可少的考虑因素。Windows操作...
总结起来,Java IO模型1涵盖了同步与异步、阻塞与非阻塞的基本概念,以及五种不同的IO处理方式,每种都有其适用场景和优缺点,开发者需要根据具体需求选择合适的IO模型。对于高并发、高效率的网络应用,通常会选择非...
在IT领域,网络编程是不可或缺的一部分,而基于事件的通知重叠IO模型是一种高效处理网络连接请求的方法。本文将深入探讨这一主题,特别是针对C++语言的实现,以及在Visual Studio 2015环境下如何应用。 首先,让...
在Richard Stevens 的《UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking 》中,提到了五种IO 模型: 1. 阻塞IO (Blocking IO) 2. 非阻塞IO (Non-Blocking IO) 3. IO 多路复用 (IO ...
### Java IO学习基础之读写文本文件 #### 一、Java IO概述 Java IO(Input/Output)是Java中处理输入输出操作的核心包,它主要提供了文件读写、网络通信等基本功能。Java IO操作主要基于流的概念进行,分为字节流...
本文将从 Unix/Linux 接口出发,介绍几种常用的 IO 模型,并分析它们的优缺点。 阻塞型 IO 模型 阻塞型 IO 模型是最基本的 IO 模型,使用 listen()、send()、recv() 等接口来实现网络通信。这些接口在调用时都可能...
本文将深入探讨“基于select IO模型的远程目录浏览与多线程文件下载”这一主题,这涉及到操作系统内核、网络编程、多线程以及文件I/O等多个核心知识点。 首先,我们要理解什么是select IO模型。在Unix/Linux系统中...
《Unix环境高级编程》中文版是一部经典之作,深入讲解了在Unix操作系统环境下进行高级系统级编程的技术和原理。这本书从基础出发,逐步引导读者进入Unix编程的深水区,是学习和理解Unix系统编程不可或缺的参考资料。...
IO管理器通常采用以下几种IO模型: 1. **同步阻塞IO**:应用程序发起IO请求后,会一直等待,直到IO操作完成。 2. **同步非阻塞IO**:应用程序发起IO请求后,可以继续执行其他任务,但需要不断检查IO操作是否完成。...
史蒂文斯在《UNIX网络编程》中介绍了五种基本的I/O模型:阻塞I/O、非阻塞I/O、I/O多路复用(如select和poll)、信号驱动的I/O(SIGIO)以及异步I/O(POSIX的aio_functions)。阻塞I/O是最基础的模型,当调用I/O操作...
4. **文件系统**:Unix的文件系统是其核心特性之一,它以树形结构组织文件。`open()`, `read()`, `write()`, `close()`等函数操作文件,`chmod()`, `chown()`, `link()`, `unlink()`等函数则用于改变文件属性或链接...
《UNIX环境高级编程》是一本深入探讨UNIX操作系统编程技术的经典著作。这本书主要针对有经验的程序员,旨在提高他们对UNIX系统的理解和使用技能,通过详细讲解系统接口和实用工具的内部工作原理,帮助开发者构建更...
Unix操作系统是广泛应用于服务器和大型计算环境的一种多用户、多任务的操作系统,尤其在数据库管理领域,如Oracle数据库的运行环境中,Unix提供了强大的系统管理和性能优化工具。以下将针对Unix的相关问题和Oracle的...
这个"unix高级程序编程的全部的实验"显然是一系列旨在深入理解Unix系统编程的实践项目。下面我们将详细探讨这些可能涵盖的知识点。 1. **系统调用**:Unix系统提供了丰富的系统调用接口,如open、read、write、...
总的来说,通过这个练习,你可以学习到如何利用多路复用IO提高TCP服务器的并发处理能力,这对于开发高负载的网络服务是至关重要的。实际代码会涉及网络编程的基本概念,如套接字API、多路复用IO机制以及并发处理策略...
### 5种Winsock IO模型详解 #### 一、引言 在Windows平台上构建网络应用程序时,选择合适的I/O模型至关重要。Windows操作系统提供了多种I/O模型来满足不同场景下的需求,包括选择(Select)、异步选择...
- **Shell**:Unix中的命令行解释器,是用户与操作系统交互的主要方式之一。 - **编程语言支持**:Unix环境支持多种编程语言,包括C语言(Unix的核心就是用C语言编写的)、Shell脚本、Perl、Python等。 - **开发...