Ch03-Java 之 NIO
July 25, 2021
操作系统层面的多路复用 IO 实现主要包括四种:select
、poll
、epoll
、kqueue
。
1. 常见类 #
java.nio.ByteBuffer
java.nio.channels.Selector
java.nio.channels.SelectableChannel
java.nio.channels.ServerSocketChannel
2. 网络模型 #
2.1 Reactor 模型 #
Reactor 是非阻塞同步网络模型,Java 可以借用 NIO 接口实现各种 Reactor 模型,比如 单Reactor单线程
、单Reactor多线程
、主从Reactor多线程
2.2 Proactor 模型 #
Proactor 是异步网络模型,需要 OS 的支持才能实现,所以 Java 借用 NIO 接口不一定能实现。
3. Selector #
不同的 SelectorProvider 实现对应了不同的 Selector,由具体的 SelectorProvider(根据不同的 OS 确定)实现进行创建。
4. 零拷贝 #
条目 | 说明 |
---|---|
MappedByteBuffer | 基于内存映射(mmap) |
DirectByteBuffer | JVM 可以对 DirectByteBuffer 的对象进行 JVM 堆外内存分配和回收管理 |
FileChannel | 用于文件读写、映射和操作的通道;定义了 transferFrom() 和 transferTo() 两个抽象方法,它通过在通道和通道之间建立连接实现数据传输 |