Java NIO基本介绍
1.Java NIO 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的
2.NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。
3.NIO 有三大核心部分:Channel(通道),Buffer(缓冲区), Selector(选择器)
Channel可以简单的理解为BIO中的socket。
4.NIO是 面向缓冲区 ,或者面向 块 编程的。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动,这就增加了处理过程中的灵活性,使用它可以提供非阻塞式的高伸缩性网络
5.Java NIO的非阻塞模式,使一个线程从某通道发送请求或者读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此,一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。
6.通俗理解:NIO是可以做到用一个线程来处理多个操作的。假设有10000个请求过来,根据实际情况,可以分配50或者100个线程来处理。不像之前的阻塞IO那样,非得分配10000个。
7.HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。
NIO模型
在NIO模式下,一个Thread有一个Selector,Selector中可以注册很多的通道,可以理解为一个线程可以管理多个通道,我们知道在BIO模式下,如果没有数据读取,那么线程就会被阻塞,NIO是Selector等待,Selector不是阻塞的,并且Selector能够感知Channel的事件,连接、断开连接、读、写等事件