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的客户、服务器端编程框架。