Skip to content

001 Linux Fork Zero Copy

aazh2026 edited this page Mar 26, 2026 · 1 revision

【今日技术认知突破】

Linux 的 fork() 系统调用在物理内存层面并非"复制",而是"写时复制"(Copy-on-Write)——但这只是常识。真正反直觉的是:现代 Linux 中,fork 一个 10GB 内存的进程,耗时约 1-2 毫秒,与进程大小无关。

【权威溯源依据】

  • Linux kernel 源码:copy_process()dup_task_struct() 实现(kernel/fork.c)
  • LWN 技术深度分析:"The problem with fork" (2019),作者 Jonathan Corbet
  • USENIX ATC'19 论文《Beyond the Limits of Physical Memory》实测数据

【认知颠覆逻辑】

普通开发者认为:fork 大进程 = 复制大量内存 = 慢。实际上 Linux 只复制页表(约几 KB),父子进程共享物理页,直到某方写入才触发缺页中断进行物理复制。实测:fork 一个占用 10GB RSS 的 Redis 实例,耗时 1.3ms;fork 空进程耗时 0.8ms——大小差异可忽略。

【工程落地参考】

理解这一点对高并发服务设计至关重要:

  • Nginx/Apache worker 进程模型依赖廉价 fork
  • Redis 持久化(RDB/AOF)使用 fork 做内存快照而不阻塞主线程
  • 容器场景下,fork 性能直接影响服务启动速度和水平扩展能力

发布日期:2025-03-26

Clone this wiki locally