Ruby中的写时复制分叉

Ruby中的写时复制分叉,ruby,fork,Ruby,Fork,我正在学习进程分叉,但也在学习它是如何在Ruby中实现的。在我的阅读中,我学到了“写下就复制”的行为。据我所知,在子线程尝试执行写操作之前,它基本上不会复制内存。这是否意味着当子进程尝试进行写入时,父内存被复制和修改,而原始内存保持不变(因此父内存不受子进程的影响?)。谢谢。是的。写时复制意味着只有两个进程相同的内存页保持共享。如果子进程或父进程写入其中一个共享页,则将拦截写入,复制该页,并且写入将发生在子进程/父进程单独拥有的新页上 值得一提的是,这与Ruby完全无关。Ruby使用底层系统的f

我正在学习进程分叉,但也在学习它是如何在Ruby中实现的。在我的阅读中,我学到了“写下就复制”的行为。据我所知,在子线程尝试执行写操作之前,它基本上不会复制内存。这是否意味着当子进程尝试进行写入时,父内存被复制和修改,而原始内存保持不变(因此父内存不受子进程的影响?)。谢谢。

是的。写时复制意味着只有两个进程相同的内存页保持共享。如果子进程或父进程写入其中一个共享页,则将拦截写入,复制该页,并且写入将发生在子进程/父进程单独拥有的新页上


值得一提的是,这与Ruby完全无关。Ruby使用底层系统的fork系统调用,这在Linux和大多数Unix上都具有写时拷贝行为

这个问题的措辞令人困惑。分叉和穿线是两件完全不同的事情。如果你能围绕你想要回答的问题编写一些基本的框架代码,这会有所帮助。垃圾收集从Ruby 2.0及更高版本开始变得对写操作友好。请参阅@FredthemagicMonderDog Fixed,谢谢谢谢!在写入之前不知道内存页是共享的。@hek2mgl:当然。但从程序的角度来看,你的答案是正确的。这两个过程是完全独立的。写时复制是一种透明的性能技巧,它使fork在实际代码中可用。是的,我知道它们是独立工作的,但我没有看到共享内存页的细节。非常感谢!:)