Java有3种网络io模型分别是BIO,NIO,AIO。了解它是socket编程的前提也是面试需要掌握的知识点,其中需要着重了解NIO,它是现代框架主要使用的IO模型。

BIO同步阻塞

Java中BIO,NIO,AIO

BIO是一个线程对应一个客户端连接,阻塞式的处理线程和客户端的数据,要等到上一个连接或数据的处理完毕才能处理下一个。

线程和客户端是1:1的关系。

tomcat6 和之前的版本默认都是使用的 BIO 模型。

NIO同步非阻塞(重要)

Java中BIO,NIO,AIO

NIO是一个线程处理多个客户端连接,客户端的请求不再是直接作用到线程,而是作用到一个Selector多路选择器上,Selector通过轮询socketchannel看哪个channel有读写事件,有的话就处理。NIO有三大核心分别是Selector、Channel、Buffer。

tomcat7之后(包含7),默认使用 NIO 模型。

线程和客户端是1:N 的关系。

Netty使用的是 NIO 异步非阻塞模型。

AIO异步分阻塞

客户端的请求由操做系统完成再通知线程去执行。

总结

目前Java基本上使用的是NIO模型,即异步非阻塞。