NIO--同步非阻塞式IO

BIO--Blocking IO--同步阻塞式IO--JDK1.4新增的IO

NIO--New IO--同步非阻塞式IO--JDK1.4新增IO

AIO-Asynchronous IO--异步非阻塞式IO--JDK1.8新增IO

 

下面说一下BIO的缺点:

会产生阻塞

一对一连接,客户端连接服务端都会创建一个线程,当客户端比较多的时候会创建大量的线程,比较耗费内存

客户端连接服务器之后不进行任何操作,但是线程依然存在于内存中,比较耗费内存

不能实现定点操作

 

NIO相比较于BIO,则完全解决了以上BIO的缺点。

NIO的组件主要有Buffer,Channel,Selector

1、Buffer - 缓冲区,面向磁盘操作,主要进行磁盘的读写,底层实际上是基于数组进行存储的

capacity - 容量,用来衡量数组大小的

limit - 限制位,限制操作位的尺度

position - 操作位,当前操作所指向的位置

mark - 标记位,位于操作位最开始的位置,通常认为标记位之前的数据是操作过的数据,且操作是准确无误的

clear - 清除缓冲区,操作位归零,限制位清空,限制位移动到容量位置,

flip - 反转缓冲区,相当于重新读取一遍之前的数据,限制位移动到操作位,操作位归零,标记位清空

reset - 重置缓冲区,将操作位移动到标记位

rewind - 重绕缓冲区,将限制位移动到容量位置,用于重复读取缓冲区中的数据

2、Channel - 传输数据,面向缓冲区的。Channel默认是阻塞的,需要手动设置为非阻塞模式

FileChannel - 文件拷贝,通过通道可以实现相同平台之间的零拷贝技术

3、Selector - 进行选择,默认情况下也是阻塞的,要求在使用时必须设置为非阻塞状态

利用此技术可以实现同一个服务器端接收多个客户端数据,可以用少量线程处理大量请求,实际上在底层依然是同步的

转载于:https://www.cnblogs.com/uh-view/p/10269767.html

你可能感兴趣的:(NIO--同步非阻塞式IO)