docs: 优化Java NIO文档图解,使用Excalidraw可视化

- 将ASCII文字图替换为专业的Excalidraw图表
- 新增4个可视化图表:三大核心组件架构、Selector多路复用模型、Buffer核心属性、零拷贝原理对比
- 图表使用配色方案区分不同组件(蓝色-Channel, 绿色-Buffer, 橙色-Selector)
- 在Obsidian中可通过![[...]]语法直接嵌入查看
This commit is contained in:
2026-03-08 11:25:54 +08:00
parent 932dc8844d
commit fabdaaee1f
7 changed files with 3415 additions and 91 deletions

View File

@@ -85,27 +85,7 @@ while (true) {
### 2. NIO 三大核心组件
```
┌────────────────────────────────────────┐
│ Java NIO 架构 │
├────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ │
│ │Channel │◄──►│ Buffer │ │
│ └────┬────┘ └─────────┘ │
│ │ │
│ ▼ │
│ ┌─────────┐ │
│ │Selector │ │
│ │(多路复用)│ │
│ └─────────┘ │
│ │
└────────────────────────────────────────┘
Channel: 数据通道(双向)
Buffer: 数据容器
Selector: 多路复用器
```
![[Java NIO三大核心组件架构]]
#### **核心组件关系**
@@ -137,29 +117,7 @@ buffer.clear();
#### **工作原理**
```
Selector 多路复用模型:
┌──────────────────────────────────┐
│ Selector │
│ │
│ select() - 阻塞等待就绪事件 │
│ │
│ ┌────┐ ┌────┐ ┌────┐ │
│ │Ch1 │ │Ch2 │ │Ch3 │ ... │
│ │就绪│ │就绪│ │就绪│ │
│ └────┘ └────┘ └────┘ │
└──────────────────────────────────┘
│ one thread
┌─────────┴──────────┐
│ Event Loop │
│ - select() │
│ - process() │
│ - repeat │
└────────────────────┘
```
![[Selector多路复用模型]]
#### **SelectionKey 事件类型**
@@ -307,25 +265,7 @@ sourceChannel.transferTo(0, sourceChannel.size(), destChannel);
#### **Buffer 结构**
```
Buffer 核心属性:
┌───────┬──────────┬──────────┬─────────┐
│ 0 │position │ limit │capacity │
│ │ │ │ │
│ 已处理 可读/写数据 │ 不可访问 │
│ 数据 │ │ │
└───────┴──────────┴──────────┴─────────┘
↑ ↑ ↑
mark position limit
操作方法:
- mark(): 标记当前 position
- reset(): 恢复到 mark 位置
- clear(): position=0, limit=capacity
- flip(): limit=position, position=0 (读→写)
- rewind(): position=0, limit 不变
```
![[Buffer核心属性]]
#### **Buffer 使用流程**
@@ -439,17 +379,7 @@ if (bytesWritten == 0) {
#### **传统 I/O vs 零拷贝**
```
传统 I/O4 次拷贝4 次上下文切换):
1. 磁盘 → 内核缓冲区 (DMA)
2. 内核缓冲区 → 用户缓冲区 (CPU)
3. 用户缓冲区 → Socket 缓冲区 (CPU)
4. Socket 缓冲区 → 网卡 (DMA)
零拷贝2 次拷贝2 次上下文切换):
1. 磁盘 → 内核缓冲区 (DMA)
2. 内核缓冲区 → 网卡 (DMA)
```
![[零拷贝原理对比]]
#### **transferTo 实现**