1.简述
AIO是Java中IO模型的一种,作为NIO的改进和增强随JDK1.7版本更新被集成在JDK的nio包中,因此AIO也被称作是NIO 2.0。区别于传统的BIO(Blocking IO,同步阻塞式模型,JDK1.4之前就存在于JDK中,NIO于JDK1.4版本发布更新)的阻塞式读写,AIO提供了从建立连接到读、写的全异步操作。AIO可用于异步的文件读写和网络通信。
异步IO采用“订阅-通知”模式:即应用程序向操作系统注册IO监听,然后继续做自己的事情。当操作系统发生IO事件,并且准备好数据后,在主动通知应用程序,触发相应的函数。
2.AIO主要API详解
AIO主要在NIO的Channels包下增加了四个异步通道:
- AsynchronousSocketChannel:客户端Socket通道类,负责客户端消息读写。
- AsynchronousServerSocketChannel:服务端Socket通道类,负责服务端Socket的创建和监听。
- AsynchronousFileChannel:负责异步读取、写入文件。
- AsynchronousDatagramChannel:
AIO的缺点:
- 实现复杂。
- 需要额外的技能、资料也较少。
- 一个著名的Selector空轮询bug,它会导致CPU100%。
- 可靠性差
因为资料较少所以不写了,最后总结如下:
AIO使用情况较少,基本不会用到,网上的资料也较少,使用时出现问题不好解决。所以尽量不要使用,当然这只是个人观点。