《Java I/O 模型》Java AIO

《Java I/O 模型》专栏文章索引
《Java I/O 模型》Java BIO
《Java I/O 模型》Java NIO
《Java I/O 模型》Java AIO

在之前的两篇博客中,我们分别学习了传统的 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 开始支持。

你可能感兴趣的:(Java,#,Java,I/O,模型,Java,网络编程,Java,IO)