1.Java IO模型常见面试题
2.Nettyåç-ä»NIOå¼å§
3.java IO、NIO、AIO详解
4.I/O 简要分析
5.面试官:bio、nio、aio是什么,他们有什么区别?
6.快速掌握java中的IO与NIO面试题
Java IO模型常见面试题
在Java编程中,I/O模型是众包配送 app 源码探讨系统如何处理应用程序与外部设备交互的核心话题。面试时,你可能会被问及同步阻塞、同步非阻塞、I/O多路复用和异步I/O这几种模型。首先,让我们来看看BIO模型,它是同步阻塞的典型代表,应用程序在发起IO操作时会阻塞,直到操作完成。这在连接较少时效率尚可,但当连接增多,会导致资源浪费。
NIO(Non-Blocking I/O)则提供了改进。早期实现方式采用轮询机制,可能导致无效遍历,但JDK1.4之后的NIO引入了多路复用器selector,实现了I/O多路复用,提高了效率。NIO引入了事件和回调机制,数据操作在后台进行,无需阻塞主线程,通过缓冲区管理实现高效数据处理。
AIO(Asynchronous I/O)是异步I/O的典范,它利用事件驱动和回调,使得I/O操作在后台进行,程序在操作发起后可以继续执行其他任务。这显著提高了并发处理能力,特别是对于大量并发连接的场景。
总结来说,Java中的I/O模型包括BIO、NIO(第一种和第二种实现方式)和AIO,它们在处理I/O操作时各有优缺点,理解并选择适合的模型对于优化程序性能至关重要。在面试中,你应该熟悉它们的工作原理、优缺点以及在实际项目中的应用。
Nettyåç-ä»NIOå¼å§
Nettyæ¯åºäºNIOçå¼æ¥éä¿¡æ¡æ¶ï¼æ¾ç»å¼å ¥è¿AIOï¼åæ¥æ¾å¼ï¼ï¼æ è¦è¯´Nettyåçæ们è¦å ä»NIOå¼å§ã
NIO æ¯JAVAå¨JDK4ä¸å¼å ¥çåæ¥éé»å¡é信模åï¼å¨NIOåºç°ä¹åï¼JDK4ä¹åï¼å¸åºä¸åªæä¸ä¸ªBIO模å顾åæä¹BLOCKING IO ï¼åæ¥é»å¡é信模åï¼
BIOï¼BLOCKING I/Oï¼ï¼
BIO 为ä¸ä¸ªè¿æ¥ ä¸ä¸ªçº¿ç¨ç模å¼ï¼å½æè¿æ¥æ¶æå¡å¨ä¼å¼å¯ä¸ä¸ªçº¿ç¨æ¥å¤ç请æ±
è¥æ¤è¯·æ±å¥é½ä¸æ³å¹²æ¤æ¶çº¿ç¨ä¼æä¹æ ·ï¼
æ¤çº¿ç¨ä¼è¿å ¥é»å¡æ¨¡å¼ï¼BLOCKINGï¼ï¼---å¥ä¹ä¸å¹²ï¼å¹²ççzzZZ~
è¿ç§ä¸è¿æ¥ï¼ä¸çº¿ç¨ç模å¼ä¼é ææå¡å¨èµæºä¸å¿ è¦çå¼é并ä¸å¨å¤§éè¿æ¥è®¿é®æ¶ æå¡å¨ä¼åçä»ä¹ï¼è½¦éï¼çº¿ç¨ï¼ä¸è¶³ï¼è½¦å¤ªå¤--æå µè½¦äº
ç±æ¤å°±åºç°äºNIO
â
NIOï¼new/NONBLOCKING I/Oï¼:
NIO为åæ¥éé»å¡é信模åï¼Selectï¼å¤è·¯å¤ç¨å¨ï¼ä¸ºæ¤æ¨¡åçæ ¸å¿ï¼å®ç°äºå¤ä¸ªè¿æ¥ä¸ä¸ªçº¿ç¨
å½æ客æ·ç«¯è¿æ¥è¯·æ±æ¶ æ¤è¿æ¥è¯·æ±ä¼è¢«æ³¨åè³selectä¸ï¼å½selectæ£æµå°æ¤è¿æ¥æI/O请æ±æ¶æä¼æå¼ä¸ä¸ªçº¿ç¨å»å¯¹æ¤I/O请æ±è¿è¡å¤ç-----å线ç¨æ¨¡å
è¿ä¸ªæ¶åæ人é®äºï¼è¿ä¹å¤æä½é½å¨ä¸ä¸ªçº¿ç¨éï¼çº¿ç¨å¿ä¸è¿æ¥æä¹åï¼
æ¤æ¶ ç±äºç½ç»è¯·æ±ãI/O读åãä¸å¡æä½é½å¨ä¸ä¸ªçº¿ç¨ä¸ï¼ä¼å¯¼è´å¨é«å¹¶åçæ åµä¸åå¨æ§è½ç¶é¢ äºæ¯ä¹æ人就æåºæ¥ å°ä¸å¡æä½ä¸¢å°å¦ä¸ä¸ªçº¿ç¨æä¹æ ·ï¼
äºæ¯åºç°äºç¬¬ä¸ç§reactor模å-使ç¨çº¿ç¨æ± è¿è¡æä½ç½ç»è¯·æ±ãIOå¨ä¸ä¸ªçº¿ç¨ï¼ä¸å¡æä½å¨å¦ä¸ªä¸ä¸ªçº¿ç¨ çä¸å¡å离----线ç¨æ± 模å
ä»æ¤å¾ä¸å¯ä»¥çåºæ¤æ¶ 模åä¸ä½¿ç¨ä¸ä¸ªçº¿ç¨æ± æ¥è¿è¡ç½ç»è¯·æ±ãIO读å
å½è¯»åå®æåå°ä¸å¡æä½ç»å®å¨çº¿ç¨æ± ä¸å¦å¤ç线ç¨ä¸-------ç½ç»IOä¸ä¸å¡æä½å¯ä»¥åæ¥è¿è¡äºï¼ä¸åé½å®ç¾äºèµ·æ¥ï¼
ä½æ¯ï¼äºæ è¿æ²¡å®ï¼ï¼è¿ä¸ªæ¶ååæ人æåºé®é¢ï¼å¨é«å¹¶åçæ¶åååï¼ä¼ä¸ä¼ææ§è½ç¶é¢
å 为ç½ç»IOæ¯é常æ¶èCPUçï¼å½ç½ç»è¯·æ±ä¸ç½ç»IOå¨å个线ç¨ä¸æ¶ï¼é CKçæ åµä¸å个线ç¨å¹¶ä¸è¶³ä»¥æ¯æèµ·ææçIOæä½ï¼å æ¤ä¹å½¢æäºå¨é«å¹¶åç¶æä¸çæ§è½ç¶é¢
äºæ¯å¤§ä½¬ä»¬å°±æ³çï¼å¦ææIOæåºæ¥è®©å个线ç¨æ± å»æ¥æ¶ç½ç»è¯·æ±ï¼ç¨å¦ä¸ä¸ªçº¿ç¨æ± æ¥è¿è¡IOä¸ä¸å¡æä½ä¼ä¸ä¼æ´å¥½
äºæ¯ç¬¬åç§Reactor模ååºè¿èç--主ä»Reactorå¤çº¿ç¨æ¨¡å
æ¤æ¨¡åä¸ mainReactoråªç¨äºæ¥æ¶ç½ç»è¯·æ±ï¼èsubReactorä¸ä¸ºä¸ä¸ªçº¿ç¨æ± ï¼çº¿ç¨æ± ä¸æ¯ä¸ªçº¿ç¨ä¸ç»å®ä¸ä¸ªselect
å½mainReactoræ¥æ¶å°è¯·æ±æ¶ï¼ä¸ä¸ªæè¿°ç¬¦ï¼ ç³»ç»ä¼çæä¸ä¸ªæ°çæ述符代表æ¤è¿æ¥çæï¼æ¤æ¶mainReactorä¼å°æ°çæ述符éè¿ä¸ä¸ªç®æ³å¨çº¿ç¨æ± ä¸éå®ä¸ä¸ªçº¿ç¨ å°æ¤æ述符ç»å®è³æ¤çº¿ç¨æ± ä¸çselectä¸ï¼ç±æ¤çº¿ç¨æ¥å¯¹è¯·æ±è¿è¡I/O ä¸ä¸å¡æä½
ä»æ¤ç¾ä¸è¿æ¥é«å¹¶åä¸æ¯é®é¢
åå°è¿ æ们æ¯ä¸æ¯æ³èµ·äºNettyçå¯å¨è¿ç¨
1ã声æ两个EventLoopGroupä¸ä¸ªä¸ºbossï¼mainReactorï¼ä¸ä¸ªä¸ºworkerï¼subReactorï¼
EventLoopGroupï¼çº¿ç¨æ± ï¼åå§åçæ¶åä¼çæï¼æå è½½ï¼æå®æ°éçEventLoopï¼çº¿ç¨ï¼è¥æ æå® åä¼çæCPUæ°X2ç线ç¨
2ã声æä¸ä¸ªå¯å¨è¾ å©ç±»Bootstrap并å°EventLoopGroup注åå°å¯å¨è¾ å©ç±»BootStrapä¸(bootStrap.group)
æ¥çåç»bootstrapæå®channel模åçå±æ§ï¼åæ·»å ä¸ä¸å¡æµæ°´çº¿ï¼channelpipelineï¼å¹¶ä¸å¨pipelineä¸æ·»å ä¸ä¸å¡æä½handlerï¼ï¼éè¿channelpipelineå¯ä»¥å¯¹ä¼ å ¥æ°æ®ä¸ºæ欲为ï¼
3ãç»å®ç«¯å£
Nettyå¯å¨å®æ
è¿æ¶åå¯è½æ人ä¼é®äºï¼è¿åä½ ä¸é¢è¯´çreactorï¼NIOæå¥å ³ç³»ï¼
è¿ä¸ªæ¶åæ们è¦è¿ä¹ç
â
è¥æ们å°bossä¸worker线ç¨æ± 设置为ç¸åçä¸ä¸ªçº¿ç¨æ± ï¼é£ä¹ä¼åçä»ä¹äºï¼
æ¤æ¶å ³æ³¨ä¸ä¸ç¬¬ä¸ä¸ªReactor模åæ¶å°±ä¼åç° å½BOSS=WORKERæ¶å nettyå®ç°çå°±æ¯ç¬¬ä¸ç§Reactor模å 使ç¨çº¿ç¨æ± 模å
èå½bossä¸çäºworkerçæ¶å使ç¨çå°±æ¯ç¬¬åç§ ä¸»ä»å¤çº¿ç¨æ¨¡å
Nettyå°±æ¯åºäºReactor模åæ¥å¯¹NIOè¿è¡äºæç¨åå°è£ ï¼ä»Nettyæºç ä¸å°±å¯ä»¥çåºæ¥å ¶å®åºå±è¿é½æ¯NIOçæ¥å£
æ¤æ¬¡å¤ä¸ºèªå·±è¯»æºç ä¹åçç解 å¦æ误请ææ£
ææ©
åææ¿ä¸ç¬¬ä¸ä¸ªèµ
java IO、bbd策略指标源码NIO、AIO详解
在Java的学习过程中,我们首先需要理解几个关键概念:同步和异步的概念,以及阻塞与非阻塞的概念。同步意味着用户线程发起I/O请求后需要等待内核I/O操作完成才能继续执行,而异步则是用户线程在发起请求后仍可继续执行,内核I/O操作完成时会通知用户线程或调用其注册的回调函数。阻塞是指在发起I/O操作后线程需要等待操作完成,而非阻塞则是在发起后立即返回操作状态,无需等待完成。
Java的IO流基于java.io包实现,提供如File、输入输出流等基础功能,其特点是同步、阻塞的交互方式。虽然简单直观,但IO效率和扩展性受限,易成为性能瓶颈。同时,java.net中的Socket、ServerSocket、HttpURLConnection等API也被认为属于同步阻塞IO类库。
为解决上述问题,Java引入了NIO框架(java.nio包),在Java 1.4中首次出现,提供了Channel、Selector、Buffer等新抽象,允许构建多路复用、同步非阻塞IO程序。此框架提供了更接近操作系统底层的高性能数据操作方式。随着Java 7的NIO 2版本(也称为AIO),引入了异步非阻塞IO方式,即异步IO操作基于事件和回调机制,应用操作直接返回,后台处理完成后系统会通知相应线程进行后续工作。
NIO的核心组成部分包括Channel(通道)、Buffer(缓冲区)和Selector(选择器)。Channel用于读取和写入数据,类似于流,但通过Buffer处理数据,同时可双向操作,仿真教学APP源码更好地反映操作系统真实情况。Buffer作为数据处理的中转池,用于存储从通道读取或准备写入通道的数据。使用Buffer读写数据通常包括写入数据、翻转缓冲区、从缓冲区读取数据以及清除或压缩缓冲区等步骤。
Selector是一个管理多个Channel的高效工具,允许通过一个线程处理大量并发连接,显著减少线程切换开销。创建和使用Selector涉及创建对象、注册Channel、访问准备就绪事件集合以及处理就绪的Channel等步骤。Selector的使用提高了线程的利用率和应用的扩展性。
当谈到异步IO(AIO),它在NIO的基础上更进一步,不依赖于IO操作准备好时的通知,而是当IO操作完成后主动通知应用,从而实现真正的非阻塞操作。AIO简化了IO编程,使操作更直接,无需等待操作准备,系统会在操作完成后调用预设的回调函数。在Java 1.7中,NIO 2版本引入了AIO,提供了AsynchronousServerSocketChannel和AsynchronousSocketChannel等异步通道,以及CompletionHandler接口来处理异步事件。
总结,Java IO流通过同步阻塞方式实现基础数据传输,NIO通过引入Channel、Buffer和Selector提供更高效、扩展性更强的IO处理方式,而AIO则进一步简化编程模型,提供非阻塞、异步的IO操作,显著提高了应用性能和可扩展性。
I/O 简要分析
本文将从文件IO、网络IO和Java IO接口三个方面来分析IO操作。
一、文件IO
一般情况下,我们通过调用read/write接口来进行IO操作,这种操作被称为标准IO,其会先经过页面缓存提高性能。海源码头钓鱼直接IO则会直接作用到磁盘,优点是减少数据拷贝和系统调用消耗,降低CPU使用率和内存占用。还有一种mmap方法,即将文件或对象映射到进程地址空间,减少一次数据拷贝和系统调用。
二、网络IO
网络IO由Linux内核统一处理,包括socket读写、数据准备和数据复制两个阶段。网络IO模型包括同步阻塞、同步非阻塞、多路复用、信号驱动和异步IO。同步阻塞IO导致进程阻塞直到数据准备好。同步非阻塞IO则允许进程在等待数据时执行其他操作。多路复用IO则允许同时监听多个连接。信号驱动IO允许在数据准备时发送信号,而异步IO允许在调用后直接获得结果。
三、Java IO接口
Java IO接口包括BIO(同步阻塞IO)、NIO(同步非阻塞IO)、AIO(异步非阻塞IO)和Okio。BIO使用InputStream/OutputStream进行IO操作,NIO基于多路复用原理,使用channel、selector和Buffer处理多个连接。AIO在NIO基础上实现数据准备和拷贝的异步操作。Okio是Java IO的封装和优化,提供Sink、Source、TimeOut和Segment等核心类简化IO操作。
总的来说,通过文件IO、网络IO和Java IO接口的不同模型,我们可以实现高效且灵活的IO操作。不同场景下选择合适的IO模型能够显著提高程序性能和效率。对于Okio的具体使用和详细架构,读者可以进一步探索其源码以深入了解。
面试官:bio、nio、aio是热气球源码什么,他们有什么区别?
Java I/O发展史
Java IO(Input/Output)是Java语言中用于读写数据的API,它提供了一系列类和接口,用于读取和写入各种类型的数据。随着Java的发展,IO操作也经历了从传统的阻塞式到非阻塞式、再到异步模式的演进,以适应不同的应用场景和性能需求。
以下是三者之间的区别:
Java IO2.1 简介
在Java编程中,IO(Input/Output)操作是非常常见的操作,它涉及到文件读写、网络通信等方面。Java提供了各种类来支持这些操作。本文将从IO的基础知识讲起,逐步深入,介绍Java IO的各个方面。
基础概念
输入流和输出流是两个重要的抽象类,输入流表示输入数据的来源,可以是文件、网络连接、管道等;输出流表示输出数据的去向,可以是文件、网络连接、管道等。输入流和输出流的使用方式是相似的,都是通过创建流对象,然后使用相应的方法接口进行读写操作。
字节流和字符流
Java中的IO操作还可以分为字节流和字符流两种。字节流以字节(byte)为单位进行操作,适用于处理二进制数据,例如图像、音频等;而字符流以字符(char)为单位进行操作,适用于处理文本数据,例如文本文件等。Java中,字节流主要由InputStream和OutputStream类以及其子类实现,而字符流主要由Reader和Writer类以及其子类实现。
缓冲流
在进行IO操作时,我们可能需要经常进行读写操作,而频繁的读写可能会导致性能问题。为了解决这个问题,Java提供了缓冲流(Buffered Stream)来提高IO操作的效率。缓冲流可以通过内部缓存区域来减少对底层资源的访问次数,从而提高数据读写的效率。
Java IO的使用
文件读写是开发中最常见的操作之一。下面是一个读取文件内容并输出的示例:
在这个示例中,我们使用了FileInputStream、InputStreamReader和BufferedReader等类来完成文件的读取。首先,我们通过FileInputStream类创建了一个输入流对象,并指定了要读取的文件名称;然后通过InputStreamReader将字节流转换为字符流,再通过BufferedReader实现按行读取文本内容。
类似地,在Java中进行文件写操作也非常简单,下面是一个写入文件的示例:
在这个示例中,我们使用了FileOutputStream、OutputStreamWriter和BufferedWriter等类来完成文件的写入。首先,我们通过FileOutputStream类创建了一个输出流对象,并指定了要写入的文件名称;然后通过OutputStreamWriter将字节流转换为字符流,再通过BufferedWriter实现按行写入文本内容。
Java NIO3.1 简介
Java NIO(New IO)是Java SE 1.4引入的一个新的IO API,它提供了比传统IO更高效、更灵活的IO操作。与传统IO相比,Java NIO的优势在于它支持非阻塞IO和选择器(Selector)等特性,能够更好地支持高并发、高吞吐量的应用场景。本文将从NIO的基础知识讲起,逐步深入,介绍Java NIO的各个方面。
核心概念
选择器是Java NIO中的一个重要组件,它可以用于同时监控多个通道的读写事件,并在有事件发生时立即做出响应。选择器可以实现单线程监听多个通道的效果,从而提高系统吞吐量和运行效率。
通道是一个用于读写数据的对象,类似于Java IO中的流(Stream)。与流不同的是,通道可以进行非阻塞式的读写操作,并且可以同时进行读写操作。通道分为两种类型:FileChannel和SocketChannel,分别用于文件和网络通信。
缓冲区是一段连续的内存块,可以保存需要读写的数据。缓冲区对象包含了一些状态变量,例如容量(capacity)、限制(limit)、位置(position)等,用于控制数据的读写。
Java NIO的使用
缓冲区操作主要包括数据读取和数据写入两种操作。下面是一个简单的缓冲区读取示例:
在这个示例中,我们使用了FileChannel类和ByteBuffer类来完成文件的读取。首先,我们通过FileInputStream类创建了一个输入流对象,然后通过getChannel()方法获取到对应的通道对象;接着,我们创建了一个容量为字节的ByteBuffer对象,并调用read()方法从通道中读取数据,将读取到的数据保存在缓冲区中。读取完成后,我们通过flip()方法将缓冲区切换为读模式,并使用hasRemaining()和get()方法逐个读取数据;最后通过clear()方法清空缓冲区,准备进行下一轮读取。
Java NIO中的缓冲区写操作也非常类似,下面是一个简单的缓冲区写入示例:
在这个示例中,我们使用了FileChannel类和ByteBuffer类来完成文件的写入。首先,我们通过ByteBuffer.wrap()方法将字符串转换为ByteBuffer对象;然后,我们通过FileOutputStream类创建了一个输出流对象,再通过getChannel()方法获取到对应的通道对象;接着,我们调用write()方法将缓冲区中的数据写入通道中,完成文件写入操作。
Java AIO4.1 Java AIO的原理
Java AIO(Asynchronous IO)采用异步IO方式进行数据读写操作,与Java NIO不同,它不需要通过轮询方式去检查数据是否准备好,而是由操作系统完成。当数据准备好后,操作系统会通知应用程序,并在回调函数中进行处理。
AIO使用了三个核心组件:AsynchronousChannel、CompletionHandler和 AsynchronousServerSocketChannel。其中,AsynchronousChannel是读/写数据的通道,CompletionHandler是I/O操作完成时的回调方法,AsynchronousServerSocketChannel是异步服务器端套接字通道,用于监听客户端的连接请求。
当数据准备好后,操作系统将通知应用程序,并在回调函数中执行I/O操作完成时的回调方法。这样就避免了线程阻塞等待I/O操作完成的情况,从而提高了程序的效率和并发处理能力。
Java AIO的特点
Java AIO适用于需要大量并发连接,但每个连接却很少有数据交互的场景,例如基于消息的应用程序、远程过程调用(RPC)等。在这些应用场景中,AIO可以大幅度提高程序的性能和并发处理能力,从而满足用户对高吞吐量和低延迟的要求。
Java AIO也可以用于开发高性能的网络服务器,例如聊天室服务器、在线游戏服务器等。由于AIO支持异步读取输入流和输出流,因此可以同时处理多个客户端请求,有效地提高了服务器的并发处理能力。
总结
Java AIO作为一种高性能、高并发的IO模型,具备很多优点,但也存在着一些缺点,如对小负载的连接,AIO的开销可能会导致性能下降。因此,在实际应用中,需要权衡各种因素,根据实际需求进行评估和选择。
相关面试题
面试官:bio、nio、aio是什么,他们有什么区别?
1、什么是Java IO和NIO? Java IO(Input/Output)是Java中传统的输入输出操作,使用字节流和字符流进行数据传输。 Java NIO(New Input/Output)是Java 1.4引入的新的输入输出API,它更加高效地处理数据。
2、什么是阻塞和非阻塞IO? 阻塞IO(Blocking IO)在进行IO操作时会一直等待,直到IO完成,期间无法进行其他操作。 非阻塞IO(Non-blocking IO)在进行IO操作时不会一直等待,而是立即返回结果,如果IO还没有完全完成,则可以继续做其他事情。
3、什么是缓冲区?有哪些类型的缓冲区? 缓冲区是一个用于存储数据的数组,在进行IO操作时需要通过缓冲区来进行读写数据。 Java的缓冲区分为字节缓冲区(ByteBuffer、CharBuffer、ShortBuffer等)和直接缓冲区(DirectByteBuffer、DirectCharBuffer、DirectShortBuffer等)。
4、什么是通道(Channel)? 通道是NIO中用于进行数据传输的对象,它可以连接到源或目标节点,用于读取和写入数据。
5、什么是选择器(Selector)? 选择器是NIO中的一个对象,它可以通过轮询注册在其上的通道来检查它们是否有事件发生(如可读、可写等),从而避免了阻塞式IO中需要等待IO完成的问题。
6、Java IO和NIO之间有什么区别? Java IO基于流的方式进行数据传输,而NIO基于缓冲区和通道进行数据传输。 Java IO是阻塞式的,而NIO可以采用阻塞或非阻塞模式。 Java IO对线程使用较多,每个IO操作都需要创建一个线程,而NIO可以使用单个线程处理多个IO操作。
7、什么是文件通道(FileChannel)? 文件通道是NIO中用于读取和写入文件的通道,它支持随机访问和内存映射文件等高级功能。
8、Java IO和NIO哪个更快? 在大量小数据量的情况下,Java IO可能更快,因为它可以通过缓冲区一次性读取所有数据。 在大量大块数据的情况下,NIO可能更快,因为它可以使用零拷贝技术直接将数据从磁盘读入内存,减少了数据复制的开销。
快速掌握java中的IO与NIO面试题
本文主要针对Java后端程序员面试中常见的IO与NIO问题进行概述。IO和NIO是Java编程的基础知识点,面试时常常被考察,体现程序员的基础扎实程度和实战应用理解。1. IO流简介
Java的IO流分为字节流和字符流,按流向可分为输入流和输出流,按角色有节点流和处理流。节点流直接操作数据,处理流则在现有流上提供增强功能。IO流体系结构复杂,由多个类组成,大部分源自4个抽象基类,通过后缀区分子类类型。2. Java IO原理
I/O技术关乎数据在设备间的传输,Java通过流(stream)进行操作。输入流读取数据到内存,输出流将内存数据输出到存储设备,如文件或网络。3. BIO、NIO、AIO对比
BIO是同步阻塞,NIO为同步非阻塞,AIO为异步非阻塞。BIO效率低,NIO通过多路复用减少资源占用,AIO则通过事件驱动避免阻塞,但处理大数据可能影响性能。4. 阻塞与非阻塞IO模型
阻塞IO可能导致用户线程阻塞,非阻塞IO则不会,但需要频繁查询数据就绪。多路复用IO通过一个线程管理多个连接,效率更高,但处理大数据可能导致性能问题。5. NIO核心与应用
NIO以Channel、Buffer和Selector为核心,Channel是双向操作的基础,Buffer存储数据便于处理,Selector实现多通道事件监听,优化了单线程资源管理。