BIO: 同步阻塞IO,一个连接一个线程
NIO:同步非阻塞,一个请求一个线程
AIO:异步非阻塞,一个有效请求一个线程
BIO:
java1.4以前,一个网络请求,就要建立一个socket,这时候一个socket连接就要询问是否有线程可以处理,如果没有就等待,要么就拒绝。一个连接要求server对应一个线程处理。
NIO
本身基于事件驱动的思想完成,解决BIO的大并发问题:在同步IO的网络应用中,如果要同时处理多个客户请求,或是在客户端要同时和多个服务器通讯,就必须使用多线程来处理。将每一个客户端的连接请求都要一个线程来单独处理。
问题:每创建一个线程,就要为这个线程分配一定的内存空间(JVM提供)同时操作系统也有对线程总数上限要求。请求过多名服务器程序就可能因为不堪重负而拒绝客户端请求宕机或者瘫痪。
NIO基于Reactor,当socket有流读或者写时,操作系统会通知应用程序处理,应用在将流读取到缓冲区或者写入操作系统。
也就是说,这个时候已经不是一个socket对应一个线程,而是一个请求对应一个线程,当连接没有数据,是没有线程来处理的。
AIO
与NIO不同,当进行读写操作时,只需要直接调用API的read和write方法,这两种方法都是异步的。
对于读操作,有流读操作时候,操作系统将流传入read方法的缓冲区,通知应用程序,写操作,操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。
可以理解为:read和write都是异步的,完成后会主动调用回调函数。
java1.7中,在java.net.channels包下四个异步通道
AsynchronousSocketChannel
AsynchronousServerSocketChannel
AsynchronousFileChannel
AsynchronousDataframChannel回调函数。
调用read/write方法会同时返回调用函数对象,当执行完,立即调用。
相关推荐
为了处理与外部世界的交互,Java提供了三种不同的I/O模型:BIO( Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)。这些模型各有优缺点,适用于不同场景。下面我们将深入探讨这三种I/O模型,并...
Java BIO NIO AIO Java BIO、NIO、AIO是 Java 中的三种 I/O 模式,每种模式都有其特点和应用场景。下面对每种模式进行详细解释。 Java BIO Java BIO( Blocking 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 三剑客,掌握 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...
读书笔记:java网络编程BIONIO, AIO 源码示例
对java io总结时编写的测试代码,包括BIO,NIO,AIO的实现,Java io操作是编程人员经常使用到的,以前只是使用没有对这三种IO做系统的了解,本文将对这三种IO作详细的介绍并附有测试完整代码
SocketIO-BIO-NIO-AIO.zip是一个压缩包文件,它包含了一个关于Java中三种不同的I/O模型——BIO( Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)的深入讲解。这些I/O模型是Java进行网络编程时的...
### BIO、NIO、AIO、Netty 面试题解析 #### 1. Java IO 基础概述 Java中的I/O操作是通过流(Stream)来实现的,所有的数据都通过流的方式被串行化处理。串行化的含义在于数据必须按顺序输入输出。Java中的IO操作...
### 2024年Java常见BIO、NIO、AIO、Netty面试题解析 #### 一、基础知识概述 1. **IO概念**: - Java中的I/O(Input/Output)指的是输入输出操作,它以流为基础进行数据的输入输出。所有的数据在Java中都是以流的...
Java作为一门广泛使用的编程语言,提供了多种I/O模型来处理数据的读写操作,其中包括BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)。这些模型各有特点,适用于不同的场景,理解它们的原理...
本文将深入探讨Java中的三种IO模型:传统IO(BIO)、非阻塞IO(NIO)以及反应器模式(Reactor),并结合提供的压缩包文件中的示例代码进行解析。 一、传统IO(BIO) 传统的Java IO基于流(Stream)进行数据传输,它...
本文将深入探讨四个关键的概念:BIO( Blocking I/O)、NIO(Non-blocking I/O)、AIO(Asynchronous I/O)以及Netty,这些都是Java平台上的网络编程模型。在面试中,对这些概念的理解和应用能力常常被用来评估候选...
教程视频:网络编程高级(同步、异步、NIO、BIO、AIO)。
Java中BIO、NIO和AIO的区别和应用场景 Java中IO模型有三种:BIO、NIO和AIO,下面我们来详细介绍它们的区别和应用场景。 BIO(Blocking I/O) BIO是Java中最古老的IO模型,它是同步并阻塞的。服务器的实现模式是一...
读书笔记:Java网络编程BIO、NIO、AIO
本文将深入探讨Java中的三种主要通讯模型:BIO( Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O),并结合实际的代码示例进行综合演练。 **一、BIO(阻塞I/O)** 1. **概念**:BIO是Java早期的...