NIO与BIO

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bestxianfeng163/article/details/86239149

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监听多个通道的方式 
当某一个通道的任何一个状态,准备就绪 
就会额外的开启一个线程,进行执行 
 

猜你喜欢

转载自blog.csdn.net/bestxianfeng163/article/details/86239149