BIO是 java -no-blocking io定义作为数据容器的缓冲区
为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。
1.NIO是以块的方式处理数据,但是IO是以最基础的字节流的形式去写入和读出的。所以在效率上的话,肯定是NIO效率比IO效率会高出很多。
2.NIO不在是和IO一样用OutputStream和InputStream 输入流的形式来进行处理数据的,但是又是基于这种流的形式,而是采用了通道和缓冲区的形式来进行处理数据的。
3.还有一点就是NIO的通道是可以双向的,但是IO中的流只能是单向的。
4.还有就是NIO的缓冲区(其实也就是一个字节数组)还可以进行分片,可以建立只读缓冲区、直接缓冲区和间接缓冲区,只读缓冲区很明显就是字面意思,直接缓冲区是为加快 I/O 速度,而以一种特殊的方式分配其内存的缓冲区。
服务器,当每一个请求进来
要接收传来的数据,都会开启一个Socket
开启一个线程,来处理数据
读取Socket传递的数据
获取到InputStream,读取数据
进行业务逻辑操作,操作完成之后
返回结果
服务器会收到很多的请求,同时在服务器操作
在业务逻辑没有完成之前,线程都无法得到释放
此时,服务器无法处理大量的请求
因为,有大量的线程处于阻塞状态
等待业务逻辑的处理完成
NIO
Non-Blocking IO
非阻塞IO
Channel,通道
Buffer,进行数据传输
Selector,选择器,也称为多路复用器
实现原理
每一个请求过来,都会创建一个通道
一个selector,可以注册很多的channel
通过,一个Selector监听多个通道的方式
当某一个通道的任何一个状态,准备就绪
就会额外的开启一个线程,进行执行