-
Notifications
You must be signed in to change notification settings - Fork 0
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