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

@@ -13,12 +13,12 @@
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "10-中间件/Netty核心原理.md", "file": "10-中间件/Java NIO核心原理.md",
"mode": "source", "mode": "source",
"source": false "source": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "Netty核心原理" "title": "Java NIO核心原理"
} }
} }
] ]
@@ -94,7 +94,7 @@
"state": { "state": {
"type": "backlink", "type": "backlink",
"state": { "state": {
"file": "10-中间件/Netty核心原理.md", "file": "10-中间件/Java NIO核心原理.md",
"collapseAll": false, "collapseAll": false,
"extraContext": false, "extraContext": false,
"sortOrder": "alphabetical", "sortOrder": "alphabetical",
@@ -104,7 +104,7 @@
"unlinkedCollapsed": true "unlinkedCollapsed": true
}, },
"icon": "links-coming-in", "icon": "links-coming-in",
"title": "Netty核心原理 的反向链接列表" "title": "Java NIO核心原理 的反向链接列表"
} }
}, },
{ {
@@ -113,12 +113,12 @@
"state": { "state": {
"type": "outgoing-link", "type": "outgoing-link",
"state": { "state": {
"file": "10-中间件/Netty核心原理.md", "file": "10-中间件/Java NIO核心原理.md",
"linksCollapsed": false, "linksCollapsed": false,
"unlinkedCollapsed": true "unlinkedCollapsed": true
}, },
"icon": "links-going-out", "icon": "links-going-out",
"title": "Netty核心原理 的出链列表" "title": "Java NIO核心原理 的出链列表"
} }
}, },
{ {
@@ -156,13 +156,13 @@
"state": { "state": {
"type": "outline", "type": "outline",
"state": { "state": {
"file": "10-中间件/Netty核心原理.md", "file": "10-中间件/Java NIO核心原理.md",
"followCursor": false, "followCursor": false,
"showSearch": false, "showSearch": false,
"searchQuery": "" "searchQuery": ""
}, },
"icon": "lucide-list", "icon": "lucide-list",
"title": "Netty核心原理 的大纲" "title": "Java NIO核心原理 的大纲"
} }
}, },
{ {
@@ -198,16 +198,21 @@
}, },
"active": "fcbc762a80282002", "active": "fcbc762a80282002",
"lastOpenFiles": [ "lastOpenFiles": [
"10-中间件/Buffer核心属性.excalidraw", "10-中间件/零拷贝原理对比.md",
"10-中间件/Selector多路复用模型.excalidraw", "10-中间件/Buffer核心属性.md",
"10-中间件/Java NIO三大核心组件架构.excalidraw", "10-中间件/Java NIO三大核心组件架构.excalidraw",
"10-中间件/Java NIO核心原理.md", "10-中间件/Java NIO核心原理.md",
"10-中间件/Java NIO三大核心组件架构.md",
"10-中间件/Selector多路复用模型.md",
"10-中间件/Buffer核心属性.excalidraw",
"10-中间件/零拷贝原理对比.excalidraw",
"10-中间件/Netty核心原理.md",
"10-中间件/Selector多路复用模型.excalidraw",
"00-项目概述/项目概述.md", "00-项目概述/项目概述.md",
"questions/02-数据库/MyBatis核心原理.md", "questions/02-数据库/MyBatis核心原理.md",
"Obsidian技能使用指南.md", "Obsidian技能使用指南.md",
"Obsidian可视化插件指南.md", "Obsidian可视化插件指南.md",
"10-中间件/Netty实战场景.md", "10-中间件/Netty实战场景.md",
"10-中间件/Netty核心原理.md",
"10-中间件", "10-中间件",
"16-LeetCode Hot 100/从前序与中序遍历序列构造二叉树.md", "16-LeetCode Hot 100/从前序与中序遍历序列构造二叉树.md",
"16-LeetCode Hot 100/路径总和.md", "16-LeetCode Hot 100/路径总和.md",
@@ -224,15 +229,10 @@
"16-LeetCode Hot 100/单词搜索.md", "16-LeetCode Hot 100/单词搜索.md",
"16-LeetCode Hot 100/子集.md", "16-LeetCode Hot 100/子集.md",
"16-LeetCode Hot 100/最长回文子串.md", "16-LeetCode Hot 100/最长回文子串.md",
"16-LeetCode Hot 100/括号生成.md",
"16-LeetCode Hot 100/删除链表的倒数第N个结点.md",
"16-LeetCode Hot 100/电话号码的字母组合.md",
"16-LeetCode Hot 100", "16-LeetCode Hot 100",
"00-项目概述", "00-项目概述",
"questions/15-简历面试", "questions/15-简历面试",
"questions/14-Web3与区块链", "questions/14-Web3与区块链",
"12-面试技巧", "12-面试技巧"
"08-算法与数据结构",
"questions/13-Golang语言"
] ]
} }

View File

@@ -0,0 +1,602 @@
---
excalidraw-plugin: parsed
tags: [excalidraw]
---
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'
# Excalidraw Data
## Text Elements
%%
## Drawing
```json
{
"type": "excalidraw",
"version": 2,
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin",
"elements": [
{
"id": "title",
"type": "text",
"x": 350,
"y": 30,
"width": 500,
"height": 35,
"angle": 0,
"strokeColor": "#1e40af",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "Buffer 核心属性与操作方法",
"fontSize": 28,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "Buffer 核心属性与操作方法",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "buffer-title",
"type": "text",
"x": 480,
"y": 100,
"width": 240,
"height": 30,
"angle": 0,
"strokeColor": "#1e40af",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 2,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "Buffer 内存布局",
"fontSize": 24,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "Buffer 内存布局",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "processed-box",
"type": "rectangle",
"x": 150,
"y": 160,
"width": 200,
"height": 80,
"angle": 0,
"strokeColor": "#2f9e44",
"backgroundColor": "#b2f2bb",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": {"type": 3},
"seed": 3,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
},
{
"id": "processed-label",
"type": "text",
"x": 200,
"y": 185,
"width": 100,
"height": 30,
"angle": 0,
"strokeColor": "#2b8a3e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 4,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "已处理数据",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "已处理数据",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "readwrite-box",
"type": "rectangle",
"x": 360,
"y": 160,
"width": 280,
"height": 80,
"angle": 0,
"strokeColor": "#1971c2",
"backgroundColor": "#a5d8ff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": {"type": 3},
"seed": 5,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
},
{
"id": "readwrite-label",
"type": "text",
"x": 450,
"y": 185,
"width": 100,
"height": 30,
"angle": 0,
"strokeColor": "#1864ab",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 6,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "可读/写数据",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "可读/写数据",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "inaccessible-box",
"type": "rectangle",
"x": 650,
"y": 160,
"width": 200,
"height": 80,
"angle": 0,
"strokeColor": "#e03131",
"backgroundColor": "#ffc9c9",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": {"type": 3},
"seed": 7,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
},
{
"id": "inaccessible-label",
"type": "text",
"x": 690,
"y": 185,
"width": 120,
"height": 30,
"angle": 0,
"strokeColor": "#c92a2a",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 8,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "不可访问",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "不可访问",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "mark-label",
"type": "text",
"x": 150,
"y": 255,
"width": 70,
"height": 25,
"angle": 0,
"strokeColor": "#f59e0b",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 9,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "mark",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "mark",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "position-label",
"type": "text",
"x": 360,
"y": 255,
"width": 100,
"height": 25,
"angle": 0,
"strokeColor": "#3b82f6",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 10,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "position",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "position",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "limit-label",
"type": "text",
"x": 640,
"y": 255,
"width": 70,
"height": 25,
"angle": 0,
"strokeColor": "#e03131",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 11,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "limit",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "limit",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "capacity-label",
"type": "text",
"x": 850,
"y": 255,
"width": 100,
"height": 25,
"angle": 0,
"strokeColor": "#7c3aed",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 12,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "capacity",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "capacity",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "methods-box",
"type": "rectangle",
"x": 150,
"y": 320,
"width": 700,
"height": 200,
"angle": 0,
"strokeColor": "#5c7cfa",
"backgroundColor": "#d0ebff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": {"type": 3},
"seed": 13,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
},
{
"id": "methods-title",
"type": "text",
"x": 410,
"y": 335,
"width": 180,
"height": 30,
"angle": 0,
"strokeColor": "#364fc7",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 14,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "核心操作方法",
"fontSize": 24,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "核心操作方法",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "method1",
"type": "text",
"x": 180,
"y": 385,
"width": 300,
"height": 50,
"angle": 0,
"strokeColor": "#374151",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 15,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "mark「」\n标记当前 position 位置",
"fontSize": 18,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "middle",
"containerId": null,
"originalText": "mark「」\n标记当前 position 位置",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "method2",
"type": "text",
"x": 510,
"y": 385,
"width": 300,
"height": 50,
"angle": 0,
"strokeColor": "#374151",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 16,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "reset「」\n恢复到 mark 位置",
"fontSize": 18,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "middle",
"containerId": null,
"originalText": "reset「」\n恢复到 mark 位置",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "method3",
"type": "text",
"x": 180,
"y": 450,
"width": 300,
"height": 50,
"angle": 0,
"strokeColor": "#374151",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 17,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "clear「」\nposition=0, limit=capacity",
"fontSize": 18,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "middle",
"containerId": null,
"originalText": "clear「」\nposition=0, limit=capacity",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "method4",
"type": "text",
"x": 510,
"y": 450,
"width": 300,
"height": 50,
"angle": 0,
"strokeColor": "#374151",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 18,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "flip「」\nlimit=position, position=0",
"fontSize": 18,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "middle",
"containerId": null,
"originalText": "flip「」\nlimit=position, position=0",
"autoResize": true,
"lineHeight": 1.25
}
],
"appState": {
"gridSize": null,
"viewBackgroundColor": "#ffffff"
},
"files": {}
}
```
%%

View File

@@ -0,0 +1,95 @@
---
excalidraw-plugin: parsed
tags: [excalidraw]
---
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'
# Excalidraw Data
## Text Elements
Java NIO 三大核心组件 ^title
Channel ^4uxiOSKr
数据通道
双向数据流
非阻塞I/O ^thM1aQV2
Buffer ^ZhHktmQf
数据容器
数据存储
读写切换 ^bwZYl5Ts
Selector ^EzyNSyMP
多路复用器
事件监听
单线程管理多连接 ^xLILOaBV
数据读写 ^30KtxT9O
注册事件 ^b9QGv9Jt
事件分发 ^W2YtCdM1
%%
## Drawing
```compressed-json
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
```
%%

View File

@@ -85,27 +85,7 @@ while (true) {
### 2. NIO 三大核心组件 ### 2. NIO 三大核心组件
``` ![[Java NIO三大核心组件架构]]
┌────────────────────────────────────────┐
│ Java NIO 架构 │
├────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ │
│ │Channel │◄──►│ Buffer │ │
│ └────┬────┘ └─────────┘ │
│ │ │
│ ▼ │
│ ┌─────────┐ │
│ │Selector │ │
│ │(多路复用)│ │
│ └─────────┘ │
│ │
└────────────────────────────────────────┘
Channel: 数据通道(双向)
Buffer: 数据容器
Selector: 多路复用器
```
#### **核心组件关系** #### **核心组件关系**
@@ -137,29 +117,7 @@ buffer.clear();
#### **工作原理** #### **工作原理**
``` ![[Selector多路复用模型]]
Selector 多路复用模型:
┌──────────────────────────────────┐
│ Selector │
│ │
│ select() - 阻塞等待就绪事件 │
│ │
│ ┌────┐ ┌────┐ ┌────┐ │
│ │Ch1 │ │Ch2 │ │Ch3 │ ... │
│ │就绪│ │就绪│ │就绪│ │
│ └────┘ └────┘ └────┘ │
└──────────────────────────────────┘
│ one thread
┌─────────┴──────────┐
│ Event Loop │
│ - select() │
│ - process() │
│ - repeat │
└────────────────────┘
```
#### **SelectionKey 事件类型** #### **SelectionKey 事件类型**
@@ -307,25 +265,7 @@ sourceChannel.transferTo(0, sourceChannel.size(), destChannel);
#### **Buffer 结构** #### **Buffer 结构**
``` ![[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/O vs 零拷贝**
``` ![[零拷贝原理对比]]
传统 I/O4 次拷贝4 次上下文切换):
1. 磁盘 → 内核缓冲区 (DMA)
2. 内核缓冲区 → 用户缓冲区 (CPU)
3. 用户缓冲区 → Socket 缓冲区 (CPU)
4. Socket 缓冲区 → 网卡 (DMA)
零拷贝2 次拷贝2 次上下文切换):
1. 磁盘 → 内核缓冲区 (DMA)
2. 内核缓冲区 → 网卡 (DMA)
```
#### **transferTo 实现** #### **transferTo 实现**

View File

@@ -0,0 +1,513 @@
---
excalidraw-plugin: parsed
tags: [excalidraw]
---
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'
# Excalidraw Data
## Text Elements
%%
## Drawing
```json
{
"type": "excalidraw",
"version": 2,
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin",
"elements": [
{
"id": "title",
"type": "text",
"x": 400,
"y": 30,
"width": 400,
"height": 35,
"angle": 0,
"strokeColor": "#1e40af",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "Selector 多路复用模型",
"fontSize": 28,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "Selector 多路复用模型",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "selector-container",
"type": "rectangle",
"x": 200,
"y": 120,
"width": 800,
"height": 250,
"angle": 0,
"strokeColor": "#f59e0b",
"backgroundColor": "#fff3bf",
"fillStyle": "solid",
"strokeWidth": 3,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 30,
"groupIds": [],
"roundness": {"type": 3},
"seed": 2,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
},
{
"id": "selector-box",
"type": "rectangle",
"x": 480,
"y": 145,
"width": 240,
"height": 80,
"angle": 0,
"strokeColor": "#e67700",
"backgroundColor": "#ffd8a8",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": {"type": 3},
"seed": 3,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
},
{
"id": "selector-text",
"type": "text",
"x": 535,
"y": 160,
"width": 130,
"height": 50,
"angle": 0,
"strokeColor": "#e67700",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 4,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "Selector\nselect「」等待",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "Selector\nselect「」等待",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "channel1-box",
"type": "rectangle",
"x": 250,
"y": 270,
"width": 120,
"height": 60,
"angle": 0,
"strokeColor": "#1971c2",
"backgroundColor": "#a5d8ff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": {"type": 3},
"seed": 5,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
},
{
"id": "channel1-text",
"type": "text",
"x": 275,
"y": 285,
"width": 70,
"height": 30,
"angle": 0,
"strokeColor": "#1864ab",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 6,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "Channel1\n就绪",
"fontSize": 16,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "Channel1\n就绪",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "channel2-box",
"type": "rectangle",
"x": 440,
"y": 270,
"width": 120,
"height": 60,
"angle": 0,
"strokeColor": "#1971c2",
"backgroundColor": "#a5d8ff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": {"type": 3},
"seed": 7,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
},
{
"id": "channel2-text",
"type": "text",
"x": 465,
"y": 285,
"width": 70,
"height": 30,
"angle": 0,
"strokeColor": "#1864ab",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 8,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "Channel2\n就绪",
"fontSize": 16,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "Channel2\n就绪",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "channel3-box",
"type": "rectangle",
"x": 630,
"y": 270,
"width": 120,
"height": 60,
"angle": 0,
"strokeColor": "#1971c2",
"backgroundColor": "#a5d8ff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": {"type": 3},
"seed": 9,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
},
{
"id": "channel3-text",
"type": "text",
"x": 655,
"y": 285,
"width": 70,
"height": 30,
"angle": 0,
"strokeColor": "#1864ab",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 10,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "Channel3\n就绪",
"fontSize": 16,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "Channel3\n就绪",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "channel-dots",
"type": "text",
"x": 800,
"y": 285,
"width": 50,
"height": 30,
"angle": 0,
"strokeColor": "#374151",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 11,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "...",
"fontSize": 24,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "...",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "eventloop-box",
"type": "rectangle",
"x": 400,
"y": 420,
"width": 400,
"height": 120,
"angle": 0,
"strokeColor": "#7c3aed",
"backgroundColor": "#d0bfff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": {"type": 3},
"seed": 12,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
},
{
"id": "eventloop-title",
"type": "text",
"x": 520,
"y": 435,
"width": 160,
"height": 30,
"angle": 0,
"strokeColor": "#5f3dc4",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 13,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "Event Loop",
"fontSize": 24,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "Event Loop",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "eventloop-desc",
"type": "text",
"x": 420,
"y": 480,
"width": 360,
"height": 45,
"angle": 0,
"strokeColor": "#374151",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 14,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "• select「」 - 等待就绪事件\n• process「」 - 处理事件\n• repeat - 循环执行",
"fontSize": 16,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "middle",
"containerId": null,
"originalText": "• select「」 - 等待就绪事件\n• process「」 - 处理事件\n• repeat - 循环执行",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "arrow-thread",
"type": "arrow",
"x": 600,
"y": 370,
"width": 0,
"height": 40,
"angle": 0,
"strokeColor": "#7c3aed",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 3,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": {"type": 2},
"seed": 15,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"points": [[0, 0], [0, 40]],
"lastCommittedPoint": null,
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": "arrow"
},
{
"id": "label-onethread",
"type": "text",
"x": 615,
"y": 380,
"width": 100,
"height": 20,
"angle": 0,
"strokeColor": "#7c3aed",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 16,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "单线程管理",
"fontSize": 16,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "middle",
"containerId": null,
"originalText": "单线程管理",
"autoResize": true,
"lineHeight": 1.25
}
],
"appState": {
"gridSize": null,
"viewBackgroundColor": "#ffffff"
},
"files": {}
}
```
%%

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff