Java有3种网络io模型分别是BIO,NIO,AIO。了解它是socket编程的前提也是面试需要掌握的知识点,其中需要着重了解NIO,它是现代框架主要使用的IO模型。
BIO同步阻塞
BIO是一个线程对应一个客户端连接,阻塞式的处理线程和客户端的数据,要等到上一个连接或数据的处理完毕才能处理下一个。
线程和客户端是1:1的关系。
tomcat6 和之前的版本默认都是使用的 BIO 模型。
NIO同步非阻塞(重要)
NIO是一个线程处理多个客户端连接,客户端的请求不再是直接作用到线程,而是作用到一个Selector多路选择器上,Selector通过轮询socketchannel看哪个channel有读写事件,有的话就处理。NIO有三大核心分别是Selector、Channel、Buffer。
tomcat7之后(包含7),默认使用 NIO 模型。
线程和客户端是1:N 的关系。
Netty使用的是 NIO 异步非阻塞模型。
AIO异步分阻塞
客户端的请求由操做系统完成再通知线程去执行。
总结
目前Java基本上使用的是NIO模型,即异步非阻塞。