- BIO(同步阻塞IO,1.4以前版本的唯一选择):
同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务端就需要启动一个线程进行处理。
- NIO(同步非阻塞IO,异步阻塞IO,1.4版本开始支持):
同步非阻塞IO:
同步并阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会发送到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。用户进程也需要时不时的轮询IO操作是否就绪,这就要求用户进程不停的去轮询
异步阻塞IO:
此种方式是指用户发一起一个IO操作以后,不等待内核IO的操作完成,等内核IO操作完成以后会通知应用程序。这其实就是同步与异步最关键的区别,同步必须等待或者主动去轮询IO操作是否完成,那为什么说是阻塞的呢?因为此时是通过select系统调用来完成的,而select函数本身是阻塞的,而采用select函数有个好处就是它可以同时监听多个文件句柄,从而提高系统并发性。
- AIO(异步非阻塞IO,7开始支持):
在此种模式下,用户进程只需要发起一个IO操作然后立即返回,等待IO操作完成以后,应用程序会得到IO操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的IO读写操作,因为真正的IO读取或者写入操作已经由内核完成了。
- reactor模式:
- 注册(读、写)就绪事件和相关联的处理器
- 事件分隔器等待事件发生
- 发生(读、写)就绪事件时,调用第一步注册的事件处理器
- 事件处理器作相应处理(读、写或后续处理)
- proactor模式:
- 应用程序初始化一个异步读、写操作,然后注册相应的事件处理器,此时事件处理器不关注读、写就绪事件,而是关注读、写完成事件,这是区别于reactor的关键。
- 事件分离器等待读、写操作完成事件
- 在事件分离器等告待读、写操作完成的时候,操作系统调用内核线程完成读写操作(异步IO都是操作系统负责将数据读写应用传递进来的缓冲区供应用程序操作,操作系统扮演了重要角色),应用程序需要传递缓冲区,这也是区别于reactor的一点。
- 事件分离器捕获到读、写完成事件以后,激活应用程序注册的事件处理器,事件处理器直接从缓冲区读写数据,不需要进行实际的读、写操作。
从上面可以看出,reactor和proactor模式的主要区别就是真正的读、写操作是由谁来完成的,reactor中需要应用程序自己读、写数据,而proactor模式中,应用程序不需要进行实际的读、写过程,它只需要从缓存区读取或者写入数据即可,操作系统会读取缓存区或者写入缓存区到真正的IO设备。NIO通常采用reactor模式,而AIO通常采用proactor模式。
综上所述,同步和异步是相对于应用和内核的交互而言的,同步需要主动去询问,而异步的时候内核在IO事件发生的时候通知应用程序,而阻塞和非阻塞仅仅系统调用系统函数的实现方式而已。
参考资料:
http://blog.csdn.net/liuj2511981/article/details/8658440
相关推荐
为了处理与外部世界的交互,Java提供了三种不同的I/O模型:BIO( Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)。这些模型各有优缺点,适用于不同场景。下面我们将深入探讨这三种I/O模型,并...
Java作为一门广泛使用的开发语言,提供了多种I/O(Input/Output)通信模型,包括传统的阻塞I/O(BIO)、非阻塞I/O(NIO)以及异步I/O(AIO)。这些通信模型在不同的场景下有着各自的优势,理解和掌握它们对于优化...
Java BIO NIO AIO Java BIO、NIO、AIO是 Java 中的三种 I/O 模式,每种模式都有其特点和应用场景。下面对每种模式进行详细解释。 Java BIO Java BIO( Blocking I/O)是一种同步阻塞式的 I/O 模式,即服务器实现...
全面理解 Java 网络编程 - BIO、NIO、AIO 本课程旨在帮助学生全面理解 Java 网络编程中的 BIO、NIO、AIO 三剑客,掌握 RPC 编程的基础知识,并结合实战项目巩固所学。 一、网络编程三剑客 - BIO、NIO、AIO BIO...
这里我们主要探讨三种不同的I/O模型:BIO( Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)。这三种模型各有特点,适用于不同的场景。 BIO(阻塞I/O)是Java早期的标准I/O模型,它基于流...
本文将深入探讨BIO( Blocking I/O)、NIO(Non-blocking I/O)、AIO(Asynchronous I/O)以及Netty框架中的线程模型,并与TCP网络协议相结合,为您提供全网最全面的解析。 首先,让我们从基础开始,了解这些I/O...
BIO、NIO 和 AIO 的区别 - **阻塞性**:BIO 是阻塞的,NIO 和 AIO 是非阻塞的。 - **数据流向**:BIO 是面向流的,NIO 是面向缓冲区的,AIO 也是面向缓冲区的。 - **性能**:BIO 由于每个连接都需要一个独立的线程...
对java io总结时编写的测试代码,包括BIO,NIO,AIO的实现,Java io操作是编程人员经常使用到的,以前只是使用没有对这三种IO做系统的了解,本文将对这三种IO作详细的介绍并附有测试完整代码
读书笔记:java网络编程BIONIO, AIO 源码示例
SocketIO-BIO-NIO-AIO.zip是一个压缩包文件,它包含了一个关于Java中三种不同的I/O模型——BIO( Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)的深入讲解。这些I/O模型是Java进行网络编程时的...
### 2024年Java常见BIO、NIO、AIO、Netty面试题解析 ...以上内容涵盖了Java中BIO、NIO、AIO以及Netty的相关概念及其区别,有助于深入理解这些技术背后的原理及应用场景。希望对你备战面试有所帮助。
Java作为一门广泛使用的编程语言,提供了多种I/O模型来处理数据的读写操作,其中包括BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)。这些模型各有特点,适用于不同的场景,理解它们的原理...
1. BIO和NIO/AIO的区别,以及为何在高并发场景下推荐使用NIO/AIO。 2. 解释Java NIO中的Channel、Buffer、Selector各自的角色和功能。 3. AIO如何实现异步I/O,与NIO相比有何优势。 4. Netty的核心特性,如事件驱动...
压缩包内的`demo2_onlyBufferStream.txt`和`demo3_onlyBufferStream.txt`分别展示了BIO与NIO使用缓冲区进行IO操作的差异,通过对比可以更好地理解两者的性能和效率区别。 总结,Java IO的发展经历了从BIO到NIO的...
Java编程中的IO模型详解:BIO,NIO,AIO的区别与实际应用场景分析 IO模型在计算机编程中扮演着至关重要的角色,特别是在网络通信中。Java提供了三种主要的IO模型:BIO(Blocking IO),NIO(Non-blocking IO),...
Java中BIO、NIO和AIO的区别和应用场景 Java中IO模型有三种:BIO、NIO和AIO,下面我们来详细介绍它们的区别和应用场景。 BIO(Blocking I/O) BIO是Java中最古老的IO模型,它是同步并阻塞的。服务器的实现模式是一...
本文将深入探讨Java中的三种主要通讯模型:BIO( Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O),并结合实际的代码示例进行综合演练。 **一、BIO(阻塞I/O)** 1. **概念**:BIO是Java早期的...
教程视频:网络编程高级(同步、异步、NIO、BIO、AIO)。