📜在之前的两篇博客中,我们分别学习了传统的 Java BIO 和当今使用比较多的 Java NIO,那么最后一个阶段再简单了解一下 Java AIO 吧(由于种种原因,目前 Java AIO 使用的并不是很多,因此暂且简单的介绍一下)。
📙Java AIO(Asychronous I/O) 即 Java 异步非阻塞 I/O,JDK 1.7 开始支持,它是对 JDK1.4 中提出的同步非阻塞I/O(NIO) 的进一步增强。服务器实现模式为一个有效请求一个线程,客户端的 I/O 请求都是由操作系统先完成,完成之后再通知服务端应用去启动线程进行处理。它是基于 NIO 模式,因此又被称为 NIO 2.0.
📕简单地说,在 Java AIO 模式下:客户端发起请求之后不需要等待服务端响应可以做其他的事情,服务端处理完之后会将处理结果通知客户端,客户端这个时候会到指定的缓存区获取数据。
🎉Java AIO 虽然是基于 Java NIO 的,但是与 Java NIO 又有些不同
🧨对于读操作而言,当有流可读时,操作系统会将可读的流传入 read 方法的缓存区。
🧨对于写操作而言,当操作系统将 write 方法传递的流写入完毕时,操作系统主动通知应用程序。
🧨因此,read/write 方法都是异步的,完成后会主动调用回调函数。
🎉在 Java AIO 中通道(Channel) 的接口是异步的,主要有四个异步通道
🧨AsychronousSocketChannel
🧨AsychronousServerSocketChannel
🧨AsynchronousFileChannel
🧨AsynchronousDatagrmChannel
🎉BIO、NIO、AIO 使用场景对比
🧨BlO 模式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中, JDK1.4 以前的唯一选择,但程序直观简单易理解。
🧨NIO 模式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1 .4 开始支持。
🧨AlO 方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用操作系统参与并发操作,编程比较复杂,JDK1.7 开始支持。