BIO、NIO、AIO的区别

BIO、NIO、AIO的区别

    一、BIO(同步阻塞IO)

    网络编程的模型其实就是C/S模型,即两个进程间的通信。BIO编程则提供最传统的一种IO网络编程方式,优点是API使用简单,易于理解。

    BIO的模型是让服务器端提供一个端口号,新建一个ServerSocket套接字对象,客户端可以通过URL和端口号与服务器建立TCP连接,服务器端和客户端通过套接字来通信,在该模型中需要服务器端有一个线程持续监听端口是否有客户端发起连接请求,当有客户端接入时,新建一个Socket对象,然后新建一个线程处理该对象,用该对象的IO流进行通信,若IO操作为结束,线程便会阻塞着。

    二、伪异步BIO

    前一种方法如果网络时延较长,会一直阻塞线程,倘若客户端连接数过多,线程会不断增加,导致系统挂掉。伪异步的方法,使用线程池来控制处理套接字的线程数量,使得线程复用,但是本质上还是一个线程处理一个连接。

    三、NIO(同步非阻塞IO)    

    NIO的模型,会在服务器端新建一个ServerSocketChanel对象,将其设置为非阻塞,注册于Selector选择器对象中,然后轮询选择器中注册的Chanel,判断Chanel的状态,对已经完成读写的SocketChanel对象,和已经完成连接的ServerSocketChanel对象进行处理,Chanel都是对Buffer对象进行读写操作,是双向的。NIO相当于对读写操作进行了异步处理,做到只需要轮询选择器获取结果,而不需要新建线程阻塞着等待IO的处理过程。

    四、AIO(异步非阻塞IO)

    AIO,同样也是基于通道实现IO操作,不同的是,他取消了选择器的使用,服务器端新建一个异步套接字通道对象,调用accept方法即可发出一个异步的方法,该方法存在有两个回调函数,在回调函数中,我们可以处理当新建连接操作完成时,需要处理的方案,不仅仅是接受连接为异步方法,包括读和写在内,都是一个异步的过程,在操作系统层面实现。

猜你喜欢

转载自blog.csdn.net/that_is_cool/article/details/80208157