注:第一幅为BIO,第二幅为NIO。NIO模拟图中,selector和大门还应有一条线(因为大门也要经过轮询)
传统IO特点
阻塞点
server.accept();
inputStream.read(bytes);
阻塞点
server.accept();
inputStream.read(bytes);
单线程情况下只能有一个客户端
用线程池可以有多个客户端连接,但是非常消耗性能
=======================分割线==========================
NIO的特点
ServerSocketChannel ----- ServerSocket
SocketChannel ------ Socket
Selector
SelectionKey
NIO的一些疑问
1、selector.select();阻塞,那为什么说nio是非阻塞的IO?
selector.select()
selector.select(1000);不阻塞
selector.wakeup();也可以唤醒selector
selector.selectNow();也可以立马返还,视频里忘了讲了,哈,这里补上
selector.select(1000);不阻塞
selector.wakeup();也可以唤醒selector
selector.selectNow();也可以立马返还,视频里忘了讲了,哈,这里补上
2、SelectionKey.OP_WRITE是代表什么意思
OP_WRITE表示底层缓冲区是否有空间,是则响应返还true