1、NIO的概念
从jdk1.4开始就出现非阻塞式(non-blocking)IO,是基于通道(channel)和缓冲区(buffer)进行操作
内部设置两个缓冲区(发送区、接收区)和高速通道
两个缓冲区:发送区、接收区
高速通道:封装了Socket
2、NIO的模式
数据从高速通道中出来,都会进入接收池,再由发送池通过高速通道返回
由客户端在selector注册事件,由线程不断轮询事件
selector:基本事件注册器:op_accept(监听)、op_connect(连接)、op_read(读取)、op_write(写入)
线程轮询selector注册器事件,通过selector key返回集合
3、五种模型
阻塞IO(Blocking IO)
非阻塞IO(non-Blocking IO)
多路复用IO(multiplexing IO)
信号驱动式IO(signal-driven IO)
异步IO(asynchronous IO)
4、NIO核心组成部分
channel:高速通道
ServerSocketChannel:通过自身静态工厂方法创建实例,封装了ServerSocket,属于Blocking IO模式,一般不会直接拿ServerSocket直接监听端口
configureBlocking:高速通道只有在阻塞式才能用,非阻塞式不能用,所以此属性需要设置为false,能才使用阻塞
Selector多路注册器:通过自身静态工厂方法创建实例,通过selectorKey.op_accept在高速通道register注册事件到SocketChannel上,注册完成后,线程在四大事件轮询,上获取set集合
selectorKey包含Channel和Selector
5、具体方法说明
selectionKey.interestOps:奖此对应的channel设置为准备接受其它客户端的事件类型
register:在该channel上注册事件,为selectionKey下次轮询的事件
6、注意事项:
服务器端的SelectionKey不能用异步处理,如果异步处理,没有注册其它键会循环遍历重复的key
从jdk1.4开始就出现非阻塞式(non-blocking)IO,是基于通道(channel)和缓冲区(buffer)进行操作
内部设置两个缓冲区(发送区、接收区)和高速通道
两个缓冲区:发送区、接收区
高速通道:封装了Socket
2、NIO的模式
数据从高速通道中出来,都会进入接收池,再由发送池通过高速通道返回
由客户端在selector注册事件,由线程不断轮询事件
selector:基本事件注册器:op_accept(监听)、op_connect(连接)、op_read(读取)、op_write(写入)
线程轮询selector注册器事件,通过selector key返回集合
3、五种模型
阻塞IO(Blocking IO)
非阻塞IO(non-Blocking IO)
多路复用IO(multiplexing IO)
信号驱动式IO(signal-driven IO)
异步IO(asynchronous IO)
4、NIO核心组成部分
channel:高速通道
ServerSocketChannel:通过自身静态工厂方法创建实例,封装了ServerSocket,属于Blocking IO模式,一般不会直接拿ServerSocket直接监听端口
configureBlocking:高速通道只有在阻塞式才能用,非阻塞式不能用,所以此属性需要设置为false,能才使用阻塞
Selector多路注册器:通过自身静态工厂方法创建实例,通过selectorKey.op_accept在高速通道register注册事件到SocketChannel上,注册完成后,线程在四大事件轮询,上获取set集合
selectorKey包含Channel和Selector
5、具体方法说明
selectionKey.interestOps:奖此对应的channel设置为准备接受其它客户端的事件类型
register:在该channel上注册事件,为selectionKey下次轮询的事件
6、注意事项:
服务器端的SelectionKey不能用异步处理,如果异步处理,没有注册其它键会循环遍历重复的key