NIO - New IO | Non-blocking IO,非阻塞 IO
Channel & Buffer
channel 是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel。channel 比 stream 更为底层。
常见的 Channel
-
FileChannel - 文件通道
-
DatagramChannel - UDP 通道
-
SocketChannel - TCP 通道
-
ServerSocketChannel - TCP 通道
常见的 Buffer
-
ByteBuffer - 以字节为单位缓冲数据
-
MappedByteBuffer
-
DirectByteBuffer
-
HeapByteBuffer
-
-
[ Short | Int | Long | Float | Double | Char ] Buffer
Selector
多线程版服务器端缺点:
一个连接对应一个线程,成本过高(内存占用大、线程上下文切换成本高),只适用连接数较少的场景。
线程池版服务器缺点:
阻塞模式(BIO)下,一个线程仅能服务一个 socket 连接,故仅适用短连接场景。线程不能被充分的利用,大部分时间在等待。
Selector 版服务器:
Selector 可配合一个线程管理多个 Channel,监测这些 Channel 上发生的事件。在非阻塞模式(NIO)下线程可被充分利用。适合连接数多,流量低的场景(low traffic)。