Appearance
io_uring 是 Linux 内核 5.1(2019 年)引入的一套全新的异步 I/O 框架,由 Jens Axboe 设计并主导开发。它从根本上重新思考了 Linux 异步 I/O 的实现方式,通过共享环形缓冲区(ring buffer)在内核和用户空间之间传递 I/O 请求与完成事件,大幅减少了系统调用次数和内存拷贝开销。在高性能存储、网络服务、数据库等对 I/O 延迟和吞吐量要求极高的场景中,io_uring 已经成为事实标准。
在 io_uring 出现之前,Linux 的异步 I/O 方案存在明显缺陷。传统的 Linux AIO(libaio)虽然提供了异步接口,但存在诸多限制:它只能用于 O_DIRECT 模式的文件 I/O,不支持缓冲 I/O 和普通文件;内部实现仍然需要陷入内核态提交请求,系统调用开销大;且 API 设计复杂,容易出错。另一条路线是通过 epoll 等多路复用机制实现伪异步,本质上仍然是同步非阻塞 I/O,需要应用层维护状态机,编程复杂度高。
libaio
epoll 虽然在高并发网络场景下表现优异,但它解决的是"事件通知"问题而非真正的异步 I/O。应用线程仍然需要自己发起 read/write 系统调用,在数据未就绪时返回 EAGAIN 并重新等待。这意味着高负载下每个连接都会产生大量系统调用,CPU 在用户态和内核态之间反复切换,成为性能瓶颈。io_uring 的目标就是提供一个真正异步、高性能、接口简洁统一的 I/O 框架。
io_uring 的核心思想是生产者-消费者模型配合共享内存,将 I/O 请求的提交和完成事件的通知都通过环形缓冲区完成,大部分操作无需系统调用。
io_uring 维护两个环形缓冲区:提交队列(Submission Queue, SQ) 和 完成队列(Completion Queue, CQ)。SQ 由用户空间向内核提交 I/O 请求,CQ 由内核向用户空间通知 I/O 完成事件。这两个队列通过 mmap 映射到用户空间,用户态代码可以直接读写,无需系统调用介入。
mmap
SQ 和 CQ 的结构都是 ring buffer,通过头尾索引实现无锁的循环队列。SQ 的尾索引由用户空间推进(表示有新请求),头索引由内核推进(表示请求已被消费);CQ 的头索引由用户空间推进(表示完成事件已被处理),尾索引由内核推进(表示有新完成事件)。这种设计使得生产者和消费者各自拥有独立的索引,无需加锁即可并发操作。
io_uring 仅需三个系统调用:
io_uring_setup(entries, params)
entries
params
io_uring_enter(fd, to_submit, min_complete, flags, sigset, sz)
min_complete
IORING_SETUP_SQPOLL
io_uring_register(fd, opcode, arg, nr_args)
提交队列中的每个条目称为 SQE(Submission Queue Entry),完成队列中的每个条目称为 CQE(Completion Queue Entry)。SQE 包含操作类型(如读、写、接受连接、发送等)、文件描述符、缓冲区地址和长度、用户数据等字段。CQE 包含操作结果(返回值,负值表示错误)和对应的用户数据,用于将完成事件与提交的请求关联起来。
SQE 的结构是 64 字节,CQE 是 16 字节,两者大小固定,便于内核和用户空间高效处理。用户在提交请求时,可以在 SQE 的 user_data 字段中填入自定义数据(通常是指向应用层请求结构的指针或请求 ID),当对应的 CQE 出现时,通过该字段找回原始请求上下文。
user_data
struct io_uring_sqe { __u8 opcode; // 操作类型:IORING_OP_READ, IORING_OP_WRITE 等 __u8 flags; // 标志位 __u16 ioprio; // I/O 优先级 __s32 fd; // 文件描述符 union { __u64 off; // 读写的偏移量 __u64 addr2; }; union { __u64 addr; // 缓冲区地址 __u64 splice_off_in; }; __u32 len; // 缓冲区长度 union { __kernel_rwf_t rw_flags; // 读写标志 __u32 fsync_flags; __u16 poll_events; __u32 poll32_events; __u32 sync_range_flags; __u32 msg_flags; __u32 timeout_flags; __u32 accept_flags; __u32 cancel_flags; __u32 open_flags; __u32 statx_flags; __u32 fadvise_advice; __u32 splice_flags; __u32 rename_flags; __u32 unlink_flags; __u32 hardlink_flags; __u32 xattr_flags; __u32 msg_ring_flags; __u32 uring_cmd_flags; __u32 waitid_flags; __u32 futex_flags; __u32 install_fd_flags; }; __u64 user_data; // 用户自定义数据,原样返回 union { __u16 buf_index; // 固定缓冲区索引(selective shared buffer) __u16 buf_group; }; __u16 personality; // 凭证选择 union { __s32 splice_fd_in; __u32 file_index; union { __u16 cmd_op; __u16 zone; }; }; __u64 __pad2[3]; }; struct io_uring_cqe { __u64 user_data; // 对应 SQE 中的 user_data __s32 res; // 操作结果 __u32 flags; // 完成标志 };
直接操作 io_uring 的系统调用接口较为繁琐,实际开发中通常使用 liburing 库,它封装了环形缓冲区的管理、SQE/CQE 的获取与提交、内存映射等细节,提供了简洁易用的 API。
liburing
#include <stdio.h> #include <fcntl.h> #include <liburing.h> #define QUEUE_DEPTH 64 int main() { struct io_uring ring; // 初始化 io_uring 实例 io_uring_queue_init(QUEUE_DEPTH, &ring, 0); int fd = open("test.txt", O_RDONLY); char buf[4096]; // 获取一个空闲的 SQE struct io_uring_sqe *sqe = io_uring_get_sqe(&ring); // 填充 SQE:读操作 io_uring_prep_read(sqe, fd, buf, sizeof(buf), 0); // 设置用户数据,用于在 CQE 中识别请求 sqe->user_data = 1; // 提交请求并等待完成 io_uring_submit(&ring); struct io_uring_cqe *cqe; // 等待一个完成事件 io_uring_wait_cqe(&ring, &cqe); printf("read %d bytes\n", cqe->res); // 标记 CQE 已消费 io_uring_cqe_seen(&ring, cqe); close(fd); io_uring_queue_exit(&ring); return 0; }
io_uring 支持批量提交多个请求,减少系统调用次数。只需连续获取多个 SQE 并填充,然后一次性提交即可。
#define BATCH_SIZE 8 struct io_uring_sqe *sqes[BATCH_SIZE]; char bufs[BATCH_SIZE][4096]; // 批量获取 SQE 并填充 for (int i = 0; i < BATCH_SIZE; i++) { sqes[i] = io_uring_get_sqe(&ring); io_uring_prep_read(sqes[i], fd, bufs[i], sizeof(bufs[i]), i * 4096); sqes[i]->user_data = i; } // 一次性提交所有请求 io_uring_submit(&ring); // 批量收割完成事件 for (int i = 0; i < BATCH_SIZE; i++) { io_uring_wait_cqe(&ring, &cqe); printf("req %llu: %d bytes\n", cqe->user_data, cqe->res); io_uring_cqe_seen(&ring, cqe); }
io_uring 的 io_uring_register 系统调用支持预先注册文件描述符和缓冲区,注册后通过索引引用而非描述符编号,内核可以直接从内部表中获取对应资源,省去了每次请求时解析文件描述符和拷贝用户缓冲区地址的开销。
io_uring_register
固定文件通过 IORING_REGISTER_FILES 注册,提交请求时使用 IOSQE_FIXED_FILE 标志并在 fd 字段填写注册索引。固定缓冲区通过 IORING_REGISTER_BUFFERS 注册,使用 IOSQE_FIXED_BUFFER 标志并通过 buf_index 引用。在频繁复用同一组文件或缓冲区(如数据库的 page cache、网络服务器预分配的 buffer pool)的场景下,这两项优化能显著降低 CPU 开销。
IORING_REGISTER_FILES
IOSQE_FIXED_FILE
fd
IORING_REGISTER_BUFFERS
IOSQE_FIXED_BUFFER
buf_index
// 注册固定文件 int fds[] = {fd1, fd2, fd3}; io_uring_register_files(&ring, fds, 3); // 使用固定文件提交请求 sqe = io_uring_get_sqe(&ring); io_uring_prep_read(sqe, 0, buf, sizeof(buf), 0); // fd=0 表示注册表索引 0 sqe->flags |= IOSQE_FIXED_FILE;
io_uring 提供了两种零拷贝机制:固定缓冲区和 提供的缓冲区(provided buffers)。
固定缓冲区注册后由内核直接 DMA 到用户缓冲区,省去了内核态缓冲区到用户态缓冲区的拷贝。provided buffers 则更进一步,用户提前向内核注册一组空缓冲区池(buffer pool),内核在完成读操作时自动选择一个空闲缓冲区填充数据,通过 CQE 告知用户使用了哪个缓冲区。用户处理完数据后,将缓冲区归还给内核池。这种模式使得用户无需提前知道数据会写入哪个缓冲区,内核可以按需分配,非常适合请求-响应模式的网络服务。
// 注册 provided buffer group struct io_uring_buf_reg reg = { .ring_entries = 32, .bgid = 1, }; io_uring_register_buf_ring(&ring, ®, 0); // 提交请求时使用 buffer group sqe = io_uring_get_sqe(&ring); io_uring_prep_recv(sqe, fd, NULL, 0, 0); sqe->flags |= IOSQE_BUFFER_SELECT; sqe->buf_group = 1; // 在 CQE 中获取实际使用的缓冲区 io_uring_wait_cqe(&ring, &cqe); if (cqe->flags & IORING_CQE_F_BUFFER) { int buf_id = cqe->flags >> 16; // buf_id 指向内核选中的缓冲区 }
通过 IOSQE_IO_LINK 标志,可以将多个 SQE 串联成链,内核按顺序依次执行。链中前一个请求完成后才执行后一个。如果链中某个请求失败,后续请求会被取消(除非设置了 IOSQE_IO_HARDLINK)。
IOSQE_IO_LINK
IOSQE_IO_HARDLINK
链式请求在需要严格顺序执行的 I/O 流水线中非常有用,例如先读后处理再写,或者先 fsync 再 close。相比用户空间手动管理依赖关系,链式请求将控制流交给内核,减少了用户态与内核态的交互。
// 链式请求:先读后写 struct io_uring_sqe *sqe1 = io_uring_get_sqe(&ring); io_uring_prep_read(sqe1, fd_in, buf, sizeof(buf), 0); sqe1->flags |= IOSQE_IO_LINK; // 链接到下一个请求 struct io_uring_sqe *sqe2 = io_uring_get_sqe(&ring); io_uring_prep_write(sqe2, fd_out, buf, sizeof(buf), 0); // sqe2 无需设置 link 标志,链在此结束 io_uring_submit(&ring);
默认情况下,应用程序通过 io_uring_enter 通知内核处理 SQ。开启 IORING_SETUP_SQPOLL 后,内核会创建一个专门的内核线程(SQ poll 线程)持续轮询 SQ,发现新请求后立即处理。这种模式下,I/O 提交完全在用户态完成,连 io_uring_enter 系统调用都可以省去,实现了真正的零系统调用 I/O 路径。
io_uring_enter
SQ Polling 模式的代价是 poll 线程会持续占用一个 CPU 核,即使没有 I/O 请求也会空转。因此它适用于 I/O 密集型应用,特别是请求持续不断到达的场景。内核提供了 IORING_SETUP_SQ_AFF 选项,可以将 poll 线程绑定到指定 CPU 核上,减少调度干扰。同时可以通过 sq_thread_idle 参数设置 poll 线程的空闲超时时间,超过该时间后线程自动休眠,直到被下一次 io_uring_enter 唤醒。
IORING_SETUP_SQ_AFF
sq_thread_idle
struct io_uring_params params = {0}; params.flags = IORING_SETUP_SQPOLL; params.sq_thread_idle = 2000; // 空闲 2ms 后休眠 io_uring_queue_init_params(QUEUE_DEPTH, &ring, ¶ms);
io_uring 最初只支持文件读写,但随着版本迭代,操作类型不断扩展,已经覆盖了绝大多数系统 I/O 场景:
IORING_OP_READ
IORING_OP_WRITE
IORING_OP_READV
IORING_OP_WRITEV
IORING_OP_FSYNC
IORING_OP_FDATASYNC
IORING_OP_RECV
IORING_OP_SEND
IORING_OP_ACCEPT
IORING_OP_CONNECT
IORING_OP_RECVMSG
IORING_OP_SENDMSG
IORING_OP_OPENAT
IORING_OP_CLOSE
IORING_OP_STATX
IORING_OP_UNLINK
IORING_OP_RENAME
IORING_OP_PROVIDE_BUFFERS
IORING_OP_REMOVE_BUFFERS
IORING_OP_POLL_ADD
IORING_OP_POLL_REMOVE
IORING_OP_TIMEOUT
IORING_OP_TIMEOUT_REMOVE
IORING_OP_ASYNC_CANCEL
IORING_OP_WAITID
IORING_OP_SIGNAL
IORING_OP_SPLICE
IORING_OP_TEE
IORING_OP_SHUTDOWN
IORING_OP_SOCKET
这意味着 io_uring 已经不再局限于"异步文件 I/O",而是一个通用的异步操作框架,理论上任何需要系统调用的操作都可以通过 io_uring 异步提交。
传统同步 I/O 或 epoll 模型中,每个 I/O 操作至少对应一次系统调用(read/write),在高并发下系统调用次数与 I/O 次数成正比。io_uring 通过共享内存批量提交和收割,可以将数百个 I/O 操作压缩到少数几次系统调用中完成。在 SQ Polling 模式下,甚至可以实现零系统调用。
epoll 模型下,每次 read/write 都涉及用户态到内核态的切换。虽然单次切换的开销在微秒级别,但在每秒百万级 I/O 的场景下,累积开销不容忽视。io_uring 的批量处理模式显著减少了上下文切换次数,SQ Polling 模式更是将提交路径完全留在用户态。
传统 I/O 路径中,数据需要从内核缓冲区拷贝到用户缓冲区(反之亦然)。io_uring 的固定缓冲区和 provided buffers 机制允许内核直接 DMA 到用户预注册的缓冲区,在支持零拷贝的场景下(如网络到存储的转发)可以完全消除内存拷贝。
epoll 的异步是"半异步"的,应用需要维护状态机处理 EAGAIN,在读写未完成时重新注册等待事件。io_uring 是真正的异步,提交请求后只需等待 CQE,无需处理中间状态,编程模型更简洁。对于复杂的 I/O 流水线,链式请求将依赖关系交给内核管理,进一步降低了应用层的复杂度。
在实际部署中,队列深度的选择需要根据负载特征调整。过小的队列会导致 SQE 分配失败(需要频繁调用 io_uring_enter 刷出已提交的请求),过大的队列则浪费内存。一般建议从 256 或 1024 开始,根据实际 I/O 并发度调整。SQ 和 CQ 的深度可以分别通过 sq_entries 和 cq_entries 参数独立设置,CQ 深度通常需要大于 SQ 深度(因为链式请求和某些操作可能产生多个 CQE)。
sq_entries
cq_entries
对于延迟敏感型应用,开启 SQ Polling 并绑定到专用 CPU 核是常见的优化手段。对于吞吐量敏感型应用,关闭 SQ Polling 以节省 CPU 资源,依靠批量提交和收割来摊薄系统调用开销。固定文件和固定缓冲区的注册是一次性开销,在文件和缓冲区被反复使用的场景下(如数据库 page I/O、网络 buffer pool)收益显著。
io_uring 的错误通过 CQE 的 res 字段返回,负值表示错误码(与 errno 值相同,如 -EINVAL、-EAGAIN 等)。需要注意的是,io_uring 在提交阶段几乎不做参数校验,大多数错误在执行阶段才暴露。因此应用代码必须检查每个 CQE 的返回值,特别是对于批量提交的场景,不能假设所有请求都会成功。
res
-EINVAL
-EAGAIN
对于 EAGAIN 类错误(如非阻塞 socket 当前无数据),可以通过注册 IORING_OP_POLL_ADD 先等待事件就绪,然后再提交实际的 I/O 操作,避免用户态忙轮询。
EAGAIN
io_uring 从 Linux 5.1 开始引入,核心功能在 5.10 左右趋于稳定。许多高级特性(如 provided buffers、registered ring buffers、socket 操作支持等)在 5.19 和 6.x 系列中才逐步完善。如果需要使用最新特性,建议至少使用 6.1 以上的内核版本。在编写兼容多版本内核的代码时,需要通过 io_uring_params.features 检查内核支持的功能标志,按需降级处理。
io_uring_params.features
/abstract - 目录 /ai - 人工智能 /ai/app - 大模型应用 /ai/app/api/openai-rpc - OpenAI_API /ai/app/arch - 应用架构 /ai/app/arch/api - API 设计 /ai/app/arch/caching - Prompt Caching /ai/app/arch/gateway - 网关与缓存 /ai/app/arch/routing - 模型路由 /ai/app/auto - 自动化 /ai/app/auto/impl - 实现原理 /ai/app/auto/traditional - 传统自动化 /ai/app/engine - 推理引擎 /ai/app/engine/llama/cpp /ai/app/engine/llama_cpp - llama.cpp /ai/app/engine/mistral/rs /ai/app/engine/mistral_rs - mistral.rs /ai/app/engine/rust/infer /ai/app/engine/rust_infer - Rust 推理引擎 /ai/app/engine/vllm - vLLM /ai/app/finetune - 微调 /ai/app/lib - 框架库 /ai/app/lib/langchain - LangChain /ai/app/lib/langchain/langgraph - LangGraph /ai/app/lib/langchain/runnable - LCEL 与 Runnable /ai/app/lib/packages - 常用包 /ai/app/multimodal - 多模态 /ai/app/multimodal/audio - 语音交互 /ai/app/multimodal/generation - 媒体生成 /ai/app/multimodal/vision - 视觉理解 /ai/app/overlay - Overlay /ai/app/overlay/agent - 智能体 /ai/app/overlay/agent/a2a - A2A 协议 /ai/app/overlay/agent/case - 应用实战 /ai/app/overlay/agent/case/claude/code /ai/app/overlay/agent/case/claude_code - Claude Code /ai/app/overlay/agent/case/cline - Cline /ai/app/overlay/agent/cua - Computer Use Agent /ai/app/overlay/agent/deep/agent /ai/app/overlay/agent/deep_agent - Deep Agent /ai/app/overlay/agent/loop - Agent 循环 /ai/app/overlay/agent/mcp - MCP Server /ai/app/overlay/agent/safety - 安全防护 /ai/app/overlay/agent/safety/content - 内容安全 /ai/app/overlay/agent/safety/guardrails - Guardrails /ai/app/overlay/agent/safety/injection - Prompt 注入 /ai/app/overlay/agent/skills - Skills /ai/app/overlay/agent/tools - 工具调用 /ai/app/overlay/ops - LLMOps /ai/app/overlay/ops/eval - 评估框架 /ai/app/overlay/ops/monitor - 可观测性 /ai/app/overlay/ops/test - 测试策略 /ai/app/overlay/rag - RAG /ai/app/overlay/rag/agentic/rag /ai/app/overlay/rag/agentic_rag - Agentic RAG /ai/app/overlay/rag/data - 数据工程 /ai/app/overlay/rag/data/parsing - 文档解析 /ai/app/overlay/rag/data/processing - 数据处理 /ai/app/overlay/rag/embedding - Embedding /ai/app/overlay/rag/graphrag - GraphRAG /ai/app/overlay/rag/retrieval - 检索质量 /ai/app/overlay/rag/vector/db /ai/app/overlay/rag/vector_db - 向量数据库 /ai/app/overlay/session - 会话管理 /ai/app/overlay/session/compression - 上下文压缩 /ai/app/overlay/session/context - Context Engineering /ai/app/overlay/session/prompt - 提示词 /ai/app/overlay/ui - AI UI /ai/compute - AI 引擎 /ai/compute/api - 标准接口 /ai/compute/api/cpu - SIMD /ai/compute/api/cuda - CUDA /ai/compute/api/opencl - OpenCL /ai/compute/api/simt - SIMT /ai/compute/api/triton - Triton /ai/compute/deploy - 部署 /ai/compute/deploy/eco - 部署工具 /ai/compute/deploy/hardware - 硬件 /ai/compute/deploy/llmops - LLMOps /ai/compute/deploy/multi-gpu - 多卡推理 /ai/compute/deploy/onnx-deploy - ONNX 部署 /ai/compute/deploy/optimization - 推理优化 /ai/compute/deploy/quantization - 模型量化 /ai/compute/deploy/serving - 服务部署 /ai/compute/distributed - 集群 /ai/compute/distributed/comm - 集合通信 /ai/compute/distributed/parallel - 模型拆分 /ai/compute/engine - 主流引擎 /ai/compute/engine/deepspeed - DeepSpeed /ai/compute/engine/other - 其他 /ai/compute/engine/pytorch - PyTorch /ai/compute/engine/vllm - vLLM /ai/compute/impl - 设计实现 /ai/compute/impl/kvcache - KV Cache /ai/compute/impl/moe - 混合专家 /ai/compute/impl/speculative - 投机解码 /ai/compute/kernel - 算子 /ai/compute/kernel/concepts - 概念索引 /ai/compute/kernel/flashattention - FlashAttention /ai/compute/kernel/format - 模型格式 /ai/compute/kernel/fusion - 算子融合 /ai/compute/kernel/gguf - GGUF /ai/compute/kernel/marlin - Marlin /ai/compute/kernel/onnx - ONNX /ai/compute/kernel/optimization - 算子优化 /ai/compute/kernel/quant/matrix /ai/compute/kernel/quant_matrix - 量化选型 /ai/compute/kernel/quantization - 量化算法 /ai/compute/stack - 计算栈 /ai/cpp - C++ /ai/neural - 神经网络 /ai/neural/dl - 深度学习 /ai/neural/dl/audio - 听觉 /ai/neural/dl/backforward - 反向传播 /ai/neural/dl/cnn - CNN /ai/neural/dl/diffusion - Diffusion /ai/neural/dl/multimodal - 多模态 /ai/neural/dl/nlp - NLP /ai/neural/dl/recommend - 推荐 /ai/neural/dl/rnn - RNN /ai/neural/dl/transformer - Transformer /ai/neural/dl/vision - 视觉 /ai/neural/dl/vit - ViT /ai/neural/llm - LLM /ai/neural/llm/arch - 架构 /ai/neural/llm/finetune - 微调 /ai/neural/llm/memo - 记忆 /ai/neural/llm/pretraind - 基座模型 /ai/neural/math - 数学基础 /ai/neural/ml - 机器学习 /ai/neural/ml/bf - 梯度下降法 /ai/neural/ml/loss - 损失函数 /ai/neural/ml/reinforce - 强化学习 /ai/neural/ml/supervised - 监督学习 /ai/neural/ml/unsupervised - 无监督学习 /ai/neural/numpy - Numpy /ai/neural/pytorch - PyTorch /ai/neural/sklearn - sklearn /ai/python - Python /ai/python/basic - 语言基础 /ai/python/basic/module - 模块系统 /ai/python/fastapi - FastAPI /ai/python/jupyter - jupyter /ai/python/uv - uv /ai/symbol - 符号逻辑 /ai/symbol/expert-system - 专家系统 /ai/symbol/logic - 数理逻辑基础 /ai/symbol/neuralify - 神经符号融合 /ai/symbol/outline - 学习路线 /ai/symbol/prolog - Prolog /ai/symbol/reasoning - 推理引擎与搜索 /ai/symbol/representation - 知识表示 /basic - 理论基础 /basic/algo - 算法 /basic/algo/compress - 压缩 /basic/algo/crypto - 加密和解密 /basic/algo/model - 算法模型 /basic/algo/model/bit - 位运算 /basic/algo/model/dp - 动态规划 /basic/algo/model/leetcode - leetcode 题型 /basic/algo/model/recrusion - 递归 /basic/algo/model/struct - 数据结构辅助 /basic/algo/sort - 排序算法 /basic/algo/string - 字符串算法 /basic/algo/struct - 数据结构 /basic/algo/struct/graph - 图 /basic/algo/struct/traversal - 图遍历 /basic/algo/struct/tree - 树 /basic/compile - 编译原理 /basic/compile/advance - 高级语言 /basic/compile/dsl - DSL /basic/compile/dsl/glob - glob /basic/compile/dsl/regex - 正则表达式 /basic/compile/lang - 编程语言概览 /basic/db - 数据库 /basic/db/cmp - SQL /basic/db/nf - 范式 /basic/graphic - 图形学 /basic/graphic/2d - 2D 图形 /basic/graphic/3d - 3D 场景渲染 /basic/hardware - 硬件组成 /basic/hardware/coding - 编码 /basic/hardware/cpu - CPU /basic/hardware/gpu - GPU /basic/hardware/interrupt - 中断 /basic/hardware/motherboard - 主板 /basic/hardware/storage - 存储 /basic/hardware/topo - CPU 拓扑 /basic/network - 网络协议 /basic/network/ether - 以太网 /basic/network/http - HTTP /basic/network/ip - IP /basic/network/protocol - 网络协议 /basic/network/tcp - TCP /basic/network/udp - UDP /basic/os - 操作系统 /basic/os/mm - 内存管理 /basic/os/schd - 调度 /client - 客户端 /client/art - 美术设计
/client/art/mime - 媒体文件 /client/art/render - 渲染 /client/art/toolchain - 工具链 /client/csharp - C# /client/csharp/async - 异步编程 /client/csharp/basic - 语言基础 /client/csharp/dotnet - .NET /client/csharp/msbuild - MSBuild /client/csharp/nuget - NuGet /client/csharp/unity - Unity /client/game - 游戏引擎 /client/game/cocos - Cocos /client/game/godot - Godot /client/game/unity - Unity /client/game/unreal - Unreal /client/gui - 图形应用 /client/gui/arch - 架构 /client/gui/arch/observe - 可观测性 /client/gui/ergonomic - 人机关系 /client/gui/ergonomic/interact - 人机交互 /client/gui/ergonomic/screen - 屏幕 /client/gui/framework - UI 框架 /client/gui/framework/cross - 跨平台 /client/gui/framework/electron - Electron /client/gui/framework/flutter - Flutter /client/gui/framework/flutter/dart - Dart /client/gui/framework/reactnative - ReactNative /client/gui/platform - UI 平台 /client/gui/platform/android - Android /client/gui/platform/gnome - Gnome /client/gui/platform/ios - Apple /client/gui/platform/web-env - Web 宿主 /client/gui/platform/windows - Windows /client/gui/security - 安全 /client/gui/security/access - 应用权限 /client/gui/security/antiattack - 网络攻击 /client/gui/security/auth - 登录鉴权 /client/gui/security/privacy - 隐私保护 /client/gui/security/sandbox - 沙箱 /client/render - 渲染引擎 /client/render/api - 标准接口 /client/render/api/directx - DirectX /client/render/api/opengl - OpenGL /client/render/api/sdl - SDL /client/render/api/vulkan - Vulkan /client/render/api/vulkan/icd - ICD /client/render/api/vulkan/spirv - SPIR-V /client/render/api/webgl /client/render/api/webgpu - WebGPU /client/render/basic - 渲染基础 /client/render/basic/mapping - 贴图 /client/render/basic/scene - 3D 场景 /client/render/engine - 主流引擎 /client/render/engine/cycles - Cycles /client/render/engine/godot - Godot /client/render/engine/skia - Skia /client/render/raster - 光栅化管线 /client/render/raster/ae - 后处理 /client/render/raster/illumination - 光照模型 /client/render/raster/rast - 光栅化算法 /client/render/raytrace - 光线追踪管线 /client/render/raytrace/bvh - 加速算法 /client/render/raytrace/denoise - 降噪 /client/render/raytrace/integrate - 混合渲染管线 /client/render/shader - 着色器 /client/render/shader/optimization - 着色器优化 /client/render/shader/patterns - 常见模式 /client/render/stack - 计算栈 /client/render/vec/compose /client/render/vec_compose - 矢量合成管线 /client/rust - Rust /client/rust/basic - 语言基础 /client/rust/basic/assets - 静态资源管理 /client/rust/basic/closure - 闭包 /client/rust/basic/ld - 链接库 /client/rust/basic/macro - 宏 /client/rust/basic/mod - 模块系统 /client/rust/basic/ref - 智能指针 /client/rust/basic/trait - 特性 /client/rust/cargo - Cargo /client/rust/cli - CLi /client/rust/framework - UI 框架 /client/rust/framework/iced - iced /client/rust/framework/slint - Slint /client/rust/framework/tauri - Tauri /client/rust/wasm - WASM /client/web - Web /client/web/api - Web API /client/web/api/wasm - WASM /client/web/browser - 浏览器 /client/web/browser/arch - 架构 /client/web/browser/devtools - DevTools 性能分析 /client/web/browser/eventloop - 事件循环 /client/web/browser/http - HTTP 协议 /client/web/browser/memleak - 内存泄漏 /client/web/browser/optimize - 性能优化 /client/web/browser/render - 渲染周期 /client/web/browser/render copy - 渲染周期 /client/web/browser/security - 浏览器安全 /client/web/browser/security copy - 安全 /client/web/browser/storage - 存储 /client/web/browser/v8 - V8 /client/web/css - CSS /client/web/css/basic - 语言基础 /client/web/css/sass - Sass /client/web/css/tailwind - Tailwindcss /client/web/css/trick - CSS trick /client/web/css/trick/animation - CSS 动画 /client/web/css/trick/bfc - 块级格式上下文 /client/web/css/trick/layout - 布局 /client/web/css/trick/layout/box-sizing - CSS盒模型 /client/web/css/trick/layout/containing-block - 包含块 /client/web/css/trick/layout/grid - grid布局 /client/web/css/trick/relative - 主题定制 /client/web/css/trick/sort - css 属性的分类 /client/web/css/trick/z-index - 层叠上下文与 z-index /client/web/eng - 工程化 /client/web/eng/bootstrap - 项目搭建 /client/web/eng/build - 构建优化 /client/web/eng/engineering - 工程化搭建 /client/web/eng/migration - 迁移 /client/web/eng/svg - svg /client/web/eng/vite - Vite /client/web/eng/vite-plugin - Vite 插件 /client/web/eng/webpack - Webpack /client/web/html - HTML /client/web/html/basic - 语言基础 /client/web/html/mathml - MathML /client/web/html/md - Markdown /client/web/html/seo - SEO /client/web/html/svg - SVG /client/web/html/trick - HTML trick /client/web/html/trick/drag - HTML 拖放 API /client/web/html/trick/event - 事件与尺寸获取 /client/web/html/trick/wc - Web Component /client/web/js - JavaScript /client/web/js/basic - 语言基础 /client/web/js/basic/async - 异步编程 /client/web/js/basic/class - 面向对象 /client/web/js/basic/iterable - 迭代器 /client/web/js/basic/obj-base-ops - js 对象基本操作 /client/web/js/basic/own-property - 属性的可枚举性和所有者 /client/web/js/basic/proto - 原型链 /client/web/js/basic/stream - Stream API /client/web/js/basic/type-transform - 隐式类型转换 /client/web/js/npm - npm /client/web/js/typescript - TypeScript /client/web/js/typescript/basic - 语法基础 /client/web/nodejs - Nodejs /client/web/nodejs/express - Express.js /client/web/nodejs/nestjs - Nestjs /client/web/nodejs/performance - Node.js 性能调优 /client/web/react - React /client/web/react/fiber - Fiber 与调和 /client/web/react/rsc - 服务端组件 /client/web/solid - Solid /client/web/ssr - SSR /client/web/ssr/nextjs - Nextjs /client/web/ssr/nuxtjs - Nuxtjs /client/web/ssr/seo - SEO /client/web/ssr/ssg - SSG /client/web/ssr/vike - Vike /client/web/typical - 典型业务 /client/web/vue - Vue /client/web/vue/cpc - 组件通信 /client/web/vue/nuxt-server - 服务端组件 /client/web/vue/vdom - 虚拟 DOM 与 Diff 算法 /design - 软件设计 /design/async - 异步 /design/async/async-await - await /design/async/reactive - 响应式 /design/async/schedule - 用户态调度 /design/concurrent - 并发 /design/concurrent/atom - 原子操作 /design/concurrent/barrier - 内存屏障 /design/concurrent/lock - 同步原语 /design/concurrent/lock/free /design/concurrent/lock_free - 无锁并发 /design/concurrent/thread - 多线程 /design/fp - 函数式 /design/fp/composition - 组合 /design/fp/functor - 函子 /design/fp/hint - hint /design/fp/immutable - 不可变 /design/fp/io - IO /design/fp/state - 状态管理 /design/oop - 面向对象 /design/oop/aop - AOP /design/oop/interface - 接口与抽象 /design/oop/ioc - IOC /design/oop/lifetime - 对象生命周期 /design/oop/om - 对象模型 /design/oop/pattern - 设计模式 /design/oop/relationship - 类间关系 /design/oop/solid - SOLID /design/spacetime - 面向时空 /design/spacetime/domain - 主机域 /design/spacetime/general - 通用域 /design/spacetime/general/architecture - 架构演进 /design/spacetime/general/container - 容器
/design/spacetime/general/corruption - 腐化 /design/spacetime/general/dependency - 依赖管理 /design/spacetime/general/tradeoff - 权衡 /design/spacetime/network - 网络域 /design/spacetime/process - 进程域 /design/spacetime/process/coupling - 组件耦合 /design/spacetime/process/scope - 作用域 /design/spacetime/process/single - 单进程 /design/spacetime/space - 体系建构 /design/typical - 经典范式 /design/typical/ability - 质量属性 /design/typical/ddd - DDD /design/typical/duty - 职责分配 /design/typical/macro - 宏观指导 /design/typical/maintainability - 可读性与可维护性 /design/typical/refactor - 重构 /design/typical/reliability - 可靠性与可用性 /design/typical/requirements - 需求分析 /design/typical/simplify - 简化原则 /design/typical/swift - 敏捷开发 /examples - 随便看看 /index /kernel - 系统层 /kernel/asm - 汇编 /kernel/asm/arm - ARM 指令集 /kernel/c - C /kernel/c/basic - 语言基础 /kernel/c/basic/io - io 操作 /kernel/c/basic/string - 字符串操作 /kernel/c/build - 构建系统 /kernel/c/concurrent - 并发编程 /kernel/c/debug - 调试 /kernel/c/lib - 库函数 /kernel/embed - 嵌入式 /kernel/embed/bios - BIOS /kernel/embed/device - 外设 /kernel/embed/device/bus - 总线设备 /kernel/embed/device/bus/i2c - I2C /kernel/embed/device/bus/pci - PCI /kernel/embed/device/bus/usb - USB /kernel/embed/device/comm - 数据面 /kernel/embed/device/platform - 平台设备 /kernel/embed/device/sub - 集成子设备 /kernel/embed/device/wwan - 蜂窝模块 /kernel/embed/elel - 硬件基础 /kernel/embed/elel/design - 打板 /kernel/embed/elel/fpga - FPGA /kernel/embed/elel/pcb - PCB /kernel/embed/elel/soc - SoC /kernel/embed/freertos - FreeRTOS /kernel/embed/iot - 物联网 /kernel/embed/sbc - 开发板 /kernel/embed/sbc/raspberry - 树莓派 /kernel/embed/sbc/stm32 - STM32 /kernel/embed/uboot - U-Boot /kernel/equip - 装机 /kernel/equip/bmc - BMC /kernel/equip/gpu - GPU /kernel/equip/laptop/brand /kernel/equip/laptop_brand - 笔记本 /kernel/equip/lte - LTE /kernel/equip/motherboard - 主板 /kernel/equip/motherboard/bmc - BMC 详解 /kernel/equip/motherboard/consumer - 消费级 /kernel/equip/motherboard/epyc - EPYC 装机 /kernel/equip/motherboard/ram - 内存适配 /kernel/equip/motherboard/server - 服务器 /kernel/equip/motherboard/threadripper - Threadripper 装机 /kernel/equip/motherboard/workstation - 工作站 /kernel/equip/motherboard/xeon - Xeon 装机 /kernel/equip/ram - 内存 /kernel/equip/sbc - SBC /kernel/equip/screen - 屏幕 /kernel/equip/server/room /kernel/equip/server_room - 机房 /kernel/equip/slot - 接口 /kernel/equip/support - 支撑设备 /kernel/linux - Linux /kernel/linux/develop - 系统开发 /kernel/linux/develop/ctx - 内核上下文 /kernel/linux/develop/io/uring /kernel/linux/develop/io_uring - io_uring /kernel/linux/develop/ip/cli /kernel/linux/develop/ip_cli - ip 命令 /kernel/linux/develop/kbuild - linux 内核构建系统 /kernel/linux/develop/lock - 同步原语 /kernel/linux/develop/service - 系统服务 /kernel/linux/develop/socket - 套接字 /kernel/linux/develop/stream-block - 流式与块式存取 /kernel/linux/develop/struct - 数据结构 /kernel/linux/develop/struct/iov - 聚簇读写 /kernel/linux/develop/struct/linked - 链表 /kernel/linux/develop/systemd - systemd /kernel/linux/develop/zero-copy - sendfile 零拷贝 /kernel/linux/device - 设备管理 /kernel/linux/device/dma - DMA /kernel/linux/device/driver - 驱动接口 /kernel/linux/device/driver/can - CAN /kernel/linux/device/driver/pci - PCIe 驱动 /kernel/linux/device/driver/usb - USB 驱动 /kernel/linux/device/driver/virtio /kernel/linux/device/iommu - IOMMU /kernel/linux/device/lifecycle - 生命周期 /kernel/linux/device/udev - udev /kernel/linux/file - 文件管理 /kernel/linux/file/block - 块设备子系统 /kernel/linux/file/pfs - 伪文件系统 /kernel/linux/file/vfs - 虚拟文件系统 /kernel/linux/irq - 中断管理 /kernel/linux/irq/clock - 时钟中断 /kernel/linux/irq/controller - 中断控制器 /kernel/linux/irq/handler - 中断处理 /kernel/linux/irq/sync - 内核并发机制 /kernel/linux/mm - 内存管理 /kernel/linux/mm/mmap - 虚拟内存映射 /kernel/linux/mm/pmm - 物理内存管理 /kernel/linux/mm/reclaim - 内存回收 /kernel/linux/mm/swap - 内存交换 /kernel/linux/net - 网络实现 /kernel/linux/net/stack - 协议栈 /kernel/linux/power - 电源管理 /kernel/linux/power/boot - 开机上电 /kernel/linux/power/tpm - 安全启动 /kernel/linux/process - 进程管理 /kernel/linux/process/cgroup - Cgroup /kernel/linux/process/ipc - IPC /kernel/linux/process/namespace - 命名空间 /kernel/linux/process/schd - 调度 /kernel/linux/process/security - 权限管理 /kernel/linux/syscall - 系统调用 /kernel/linux/syscall/file - 文件管理 /kernel/linux/syscall/mm - 内存管理 /kernel/linux/syscall/process - 进程管理 /kernel/linux/video - 视图系统 /kernel/linux/video/terminal - 终端系统 /kernel/netlink - 通信 /kernel/netlink/hardware - 硬件通信 /kernel/netlink/protocol - 协议分层 /kernel/vm - 虚拟化 /kernel/vm/basic - 基本原理 /kernel/vm/basic/bios - BIOS /kernel/vm/basic/cpu - CPU /kernel/vm/basic/device - 设备 /kernel/vm/basic/memory - 内存 /kernel/vm/debug - 虚拟机调试增强 /kernel/vm/qemu - QEMU 内核调试 /kernel/vm/spdk-dpdk - SPDK 与 DPDK /kernel/vm/vfio - VFIO /kernel/vm/virtio - VirtIO /sde - 工程化 /sde/container - 容器 /sde/container/docker - Docker /sde/container/principle - 实现原理 /sde/git - Git /sde/git/advanced - Git 高阶用法 /sde/git/github - Github /sde/git/gitlab - Gitlab /sde/k8s - K8s /sde/k8s/k3s - k3s /sde/k8s/network - 网络模型 /sde/shell - Shell /sde/shell/basic - 语言基础 /sde/shell/cli - 常见命令行 /sde/sre - 运维 /sde/sre/elk - 可观测性 /sde/sre/jenkins - Jenkins /sde/sre/openstack - OpenStack /sde/sre/tuning - Linux 性能调优 /sde/test - 测试 /sde/test/basic - 测试原理 /sde/test/framework - 测试工具与框架 /sde/test/tdd - 测试驱动开发 /sde/workflow - 工作流 /sde/workflow/devops - DevOps /sde/workflow/devops/cicd - CI/CD /sde/workflow/quality - 质量控制 /sde/workflow/quality/docs - 文档工程 /sde/workflow/quality/review - Code Review /sde/workflow/version - 版本管理 /server - 服务端 /server/db - 数据库 /server/db/architecture - 数据库架构分层 /server/db/distributed - 集群 /server/db/distributed/comparison - 数据库对比与选型 /server/db/distributed/newsql - NewSQL 数据库 /server/db/distributed/sharding - 分库分表 /server/db/distributed/transaction - 分布式事务 /server/db/engine - 存储引擎 /server/db/engine/fulltext - 全文检索 /server/db/engine/graph - 图 /server/db/engine/innodb - innodb /server/db/engine/vector - 向量 /server/db/nosql - NoSQL /server/db/nosql/es - ElasticSearch /server/db/nosql/milvus - Milvus /server/db/nosql/milvus/idx - 向量索引 /server/db/nosql/milvus/storage - 分布式能力 /server/db/nosql/milvus/usage - 使用实践 /server/db/nosql/minio - MinIO /server/db/nosql/mongo - MongoDB
/server/db/nosql/neo4j - Neo4j /server/db/nosql/redis - Redis /server/db/practice - 工程实践 /server/db/practice/backup - 备份与恢复 /server/db/practice/capacity - 容量规划 /server/db/practice/cloud - 云数据库服务 /server/db/practice/monitoring - 监控与运维 /server/db/practice/standards - 数据库规范 /server/db/practice/tuning - 性能调优实践 /server/db/sql - SQL /server/db/sql/basic - sql 基础 /server/db/sql/basic/design - 数据库设计 /server/db/sql/basic/integrity - 数据完整性 /server/db/sql/basic/transaction - 事务与并发控制 /server/db/sql/mysql - MySQL /server/db/sql/mysql/acid - ACID /server/db/sql/mysql/id - 索引 /server/db/sql/mysql/impl - 存储引擎 /server/db/sql/mysql/optimize - 查询优化 /server/db/sql/pg - PostgreSQL /server/db/sql/sqlite - SQLite /server/distribute - 分布式 /server/distribute/arch - 集群架构 /server/distribute/basic - 分布式基础 /server/distribute/basic/cap - CAP /server/distribute/basic/concurrency - 并发模型 /server/distribute/basic/concurrency/coroutine - 协程原理 /server/distribute/basic/concurrency/event-loop - 事件驱动架构 /server/distribute/basic/consensus - 共识算法 /server/distribute/basic/consensus/paxos - Paxos 算法 /server/distribute/basic/consensus/raft - Raft 算法 /server/distribute/basic/consensus/zab - ZAB 协议 /server/distribute/basic/id - 分布式 ID /server/distribute/basic/lock - 分布式锁 /server/distribute/basic/transaction - 分布式事务 /server/distribute/cloud - 云原生 /server/distribute/cloud/arch - 架构 /server/distribute/cloud/cicd - CI/CD /server/distribute/cloud/container - 容器技术 /server/distribute/cloud/mesh - Service Mesh /server/distribute/cloud/orchestration - Kubernetes /server/distribute/cloud/pkg - 包管理与镜像 /server/distribute/micro - 微服务 /server/distribute/micro/cache - 缓存 /server/distribute/micro/cache/consistency - 缓存一致性 /server/distribute/micro/config - 配置中心 /server/distribute/micro/discovery - 服务发现 /server/distribute/micro/gateway - API 网关 /server/distribute/micro/lb - 负载均衡 /server/distribute/micro/observability - 可观测性 /server/distribute/micro/observability/monitoring - 监控告警 /server/distribute/micro/observability/tracing - 链路追踪 /server/distribute/micro/qos - QoS /server/distribute/micro/qos/chaos - 混沌工程 /server/distribute/micro/qos/fuse - 熔断限流 /server/distribute/micro/qos/ha - 高可用与容错 /server/distribute/micro/qos/ha/load-balance - 负载均衡 /server/distribute/micro/qos/highes - 三高 /server/distribute/micro/qos/monitor - 监控 /server/distribute/micro/qos/observability - 可观测性 /server/distribute/micro/qos/observability/monitoring - 监控指标设计 /server/distribute/micro/qos/performance - 性能优化 /server/distribute/micro/qos/performance/profiling - 性能分析工具 /server/distribute/micro/qos/reliability/disaster-recovery - 容灾 /server/distribute/micro/qos/reliability/failover - 故障转移 /server/distribute/micro/qos/slashing - 限流降级 /server/distribute/micro/reliability - 健壮性 /server/distribute/micro/reliability/fusing - 熔断降级 /server/distribute/micro/reliability/ratelimit - 限流 /server/go - Go /server/go/gmp - GMP 调度器 /server/java - Java /server/java/basic - 语言基础 /server/java/jvm - JVM 内存与 GC /server/java/mod - 模块系统 /server/java/mod/gradle - gradle /server/java/mod/maven - Maven /server/java/spring - Spring /server/middleware - 中间件 /server/middleware/mq - 消息队列 /server/middleware/mq/kafka - Kafka /server/middleware/mq/rabbitmq - RabbitMQ /server/middleware/mq/rocketmq - RocketMQ /server/middleware/mycat - MyCat /server/middleware/proxy - 代理 /server/middleware/proxy/gateway - API 网关 /server/middleware/proxy/haproxy - haproxy /server/middleware/proxy/lvs - LVS /server/middleware/proxy/nginx - Nginx /server/middleware/srs - SRS /server/network - 网络编程 /server/network/io-model - I/O 模型 /server/network/proto - 网络协议 /server/network/proto/http - HTTP /server/network/proto/quic - QUIC /server/network/proto/rpc - RPC 框架 /server/network/proto/tcp - TCP /server/network/proto/udp - UDP /server/network/proto/websocket - WebSocket /server/network/security - 网络安全 /server/network/tcp-tuning - TCP 调优 /server/network/zero-copy - 零拷贝 /server/typical - 典型业务 /server/typical/auth - 登录鉴权 /server/typical/flash/sale /server/typical/flash_sale - 秒杀活动 /server/typical/image - 图片上传 /server/typical/order - 订单管理 /server/typical/search - 内容搜索 /server/typical/setup - 快速建站 /web3 - 去中心化 /web3/blockchain - 区块链 /web3/blockchain/consensus - 共识机制 /web3/blockchain/crypto - 密码学支持 /web3/blockchain/ethereum - 以太坊 /web3/blockchain/zk-proof - 零知识证明 /web3/dapp - DApp /web3/dapp/defi - DeFi /web3/dapp/tokens - 代币标准 /web3/dapp/wallets - 账户与钱包 /web3/solidity - Solidity /web3/solidity/smart-contracts - 智能合约