BIO、NIO、AIO的区别——Netty系列(一)

        Netty是一个提供异步事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络服务器和客户端程序。换句话说,Netty是一个NIO框架,使用它可以简单快速地开发网络应用程序,比如客户端和服务端的协议。这是官方文档中的描述,作为Java初学者,这里面一个名词NIO是完全没有概念,为此专门查阅了相关资料,对NIO有了较为清晰的了解。

        对于NIO的描述,通常都是和BIO、AIO进行对比说明的。下面将分别说明三者的概念。

        BIO: 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理(一客户端一线程)。该模型最大的问题就是缺乏弹性伸缩能力,当客户端并发访问量增加后,服务端的线程数与客户端并发访问数呈1:1的关系,系统性能将急剧下降,随着并发访问量的继续增加,系统会发生线程堆栈溢出、创建新线程失败等问题,并最终导致宕机或僵死。

 

        NIO:异步非阻塞,服务器实现模式为一个请求一个线程,客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

对于NIO,有两点需要强调的:

      (1)关于概念有两种理解,New I/O(相对于之前的I/O库是新增的)和Non-block I/O(非阻塞的)。由于NIO的目标就是让java支持非阻塞I/O,所有更多人喜欢用Non-block I/O。

      (2)很多人喜欢将NIO称为异步非阻塞I/O,但是,如果按照严格的NUIX网络编程模型和JDK的实现进行区分,实际上它只是非阻塞I/O,不能称之为异步非阻塞I/O。但由于NIO库支持非阻塞读和写,相对于之前的同步阻塞读和写,它是异步的,因此很多人习惯称NIO为异步非阻塞I/O。

 

       AIO:JDK1.7升级了NIO库,升级后的NIO库被称为NIO2.0,正式引入了异步通道的概念。NIO2.0的异步套接字通道是真正的异步非阻塞I/O,此即AIO。其服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。

你可能感兴趣的:(Netty框架)