AIO编程

AIO编程,在NIO基础之上引入了异步通道的概念,并提供了异步文件和异步套接字通道的实现,从而在真正意义上实现了异步非阻塞,之前我们学习的NIO只是非阻塞而并非异步。而AIO它不需要通过多路复用器对注册的通道进行轮询操作即可实现异步读写,从而简化了NIO编程模型。也可以称之为NIO2.0,这种模式才真正的属于我们的异步非阻塞的模型。

AsynchronousServerSocketChannel

AsynchronousSocketChannel

下面看一下AIO通信的实现方式:

在35行,accept方法这里有一个this的参数,这个参数要特别注意一下,这里指的是实例化的Server对象,同下面代码的第17行,下面的这个This指的是实例化的

ServerCompletionHandler,这样反复的执行,可以确保多个客户端都可以阻塞

下面看一下Client代码:

这边起了3个客户端,需要注意的是,Server端的代码和Client端的代码需要一直执行着,所以在Server端使用了休眠,在Client端使用了死循环,这样确保代码是一直运行着的,现在我们运行一下,看一下答应的结果。

Server端打印结果:

看一下Client端打印结果:

需要注意的地方是在声明缓存池的时候,不要使用固定数量的线程池,那要的话接入的客户端数据就会存在问题。

BIO,NIO,AIO的区别:

BIO是传统的通信,使用的是TCP的三次握手,也就是传统的socket编程,接入一个客户端,就新建一个线程。是同步阻塞的方式。

NIO是同步非阻塞的方式实现的,其中最关键的是使用了selector注册器进行通道的注册。

AIO是异步非阻塞的方式实现的,其中是使用了线程池和通道的配合,并且一直反复的调用,来实现这种异步非阻塞的实现方式。

原文地址:https://www.cnblogs.com/shmilyToHu/p/6668321.html