BIO,伪异步IO,NIO,AIO与Netty

BIO(阻塞IO)

一个线程负责连接,一请求一应答,缺乏弹性伸缩能力。

 

伪异步IO通信(BIO优化版本)

线程池负责连接,M请求N应答,线程池阻塞。伪异步IO是BIO的一个优化方案。

创建N个线程的线程池对请求进行处理,由于线程池可创建大小,所以资源是可控的,当并发很大时也不会造成资源耗尽或者当机,但当有大量客户端接入的时候会造成线程池阻塞。

 

NIO通信(非阻塞IO,JDK1.4后引入)

缓冲区Buffer,通道Channel,多路复用器Selector。

任何时候访问NIO中的数据都是通过缓冲区进行操作的。

网络数据通过通道Channel进行读写,是双向全双工的。

Selector会不断的轮询注册在其上的Channel,当某个Channel发生读写事件会被轮询出来,通过SelectorKey获取就绪Channel的

集合进行后续的IO操作,JDK使用epoll()代替传统的selector实现,所以并没有最大连接数的限制,可以接入成千上万的客户端,所以在IO通信领域是一个极大的进步。

 

AIO通信(异步非阻塞IO,JDK1.7之后,NIO2.0)

链接注册读写事件和回调函数,读写方法异步,主动通知程序。

四种IO对比

Netty

Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。Netty 是一个基于NIO的客户、服务器端编程框架。

Netty的应用使用请看下章。

猜你喜欢

转载自blog.csdn.net/Java_Mrsun/article/details/81901897