Ch03-Java 之 NIO

Ch03-Java 之 NIO

July 25, 2021
Java | IO
java

操作系统层面的多路复用 IO 实现主要包括四种:selectpollepollkqueue

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 确定)实现进行创建。

java-io-nio

4. 零拷贝 #

条目 说明
MappedByteBuffer 基于内存映射(mmap)
DirectByteBuffer JVM 可以对 DirectByteBuffer 的对象进行 JVM 堆外内存分配和回收管理
FileChannel 用于文件读写、映射和操作的通道;定义了 transferFrom() 和 transferTo() 两个抽象方法,它通过在通道和通道之间建立连接实现数据传输

5. 参考文献 #