我正在学习进程 fork ,以及它是如何在 Ruby 中具体实现的。在我的阅读中,我了解了“写时复制”行为。据我了解,在子线程尝试进行写操作之前,这基本上不会复制内存。这是否意味着当子进程确实尝试写入时,父内存被复制和修改,并且原始内存保持不变(因此父内存不受子进程的影响?)。谢谢。
最佳答案
是的。写时复制意味着只有两个进程相同的内存页保持共享。如果子进程或父进程写入共享页面之一,写入将被拦截,页面将被复制,写入将发生在子进程/父进程独有的新页面上。
值得一提的是,这与 Ruby 没有任何关系。 Ruby 使用底层系统的 fork 系统调用,它在 Linux 和大多数 UNIX 上具有写时复制行为。
关于ruby - Ruby 中的写时复制 fork ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21862857/