3

我读过一些红宝石叉子友好的地方,好的链接

但是当我碰巧在谷歌上搜索更多信息时,我发现 Ruby 不支持COW(写入时复制)

现在我实际上有点困惑 ruby​​ 是否真的支持COW功能

我也知道REERubinius有一个COW 友好的 GC,所以我 REE 和 Rubinius 支持COW功能

我是的,我很想测试它,任何人都可以建议我,如果 ruby​​ 支持COW功能,那么如何编写示例代码来测试Ruby 中的 COW 概念

谢谢

4

1 回答 1

1

fork写入时复制是操作系统内核的属性,而不是 Ruby。在大多数类 UNIX 系统上,它是。

例如,在 Linux 上,您可以查看/proc/pid/smaps有多少堆映射是共享的。这是一个bash做叉子的例子:

02020000-023cd000 rw-p 00000000 00:00 0                                  [heap]
Size:               3764 kB
Rss:                3716 kB
Pss:                1282 kB
Shared_Clean:          0 kB
Shared_Dirty:       3652 kB
Private_Clean:         0 kB
Private_Dirty:        64 kB
Referenced:          144 kB
Anonymous:          3716 kB
AnonHugePages:         0 kB
Swap:                  0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB

因此,在其 3764k 堆中,3652k 是共享的。有关. _ _/proc

当然,Ruby 可能有一些东西会导致 COW 页面被复制(例如,它的垃圾收集器可能会写入每个页面),但是您可以通过共享计数变为 0 看到这一点。

于 2012-05-25T17:56:45.630 回答