当进程执行了fork()系统调用,子进程会复制父进程的所有内存页面,并将其载入操作系统为它所分配的那片独立内存中。不难想象,这个拷贝的动作对于CPU来说将会非常耗时。Linux早此处引入了一种叫做写时拷贝(Copy On Write,缩写COW)的机制,不干这种傻事。当fork发生时,子进程根本不会去拷贝父进程的内存页面,二是与父进程共享;当子进程或父进程需要修改一个内存页面时,Linux就将这个内存页面复制一份给修改者,然后再去修改。这样从用户的角度看,父子进程根本没有共享什么内存,符合进程资源独立的原则。这个花招就是COW。对Linux内核而言,线程和进程的差别就在于用不用COW。
采用了COW技术后,fork时,子进程还需要拷贝父进程的页面表。采用这种设计就是要模拟传统Unix系统fork时的效果。当然,这种拷贝的代价非常的小,对于CPU来说用不了几个时钟周期,类似nginx这类的高性能服务器系统就是受益于此。