Ruby fork是COW友好的,如果是,如何测试它

时间:2012-05-25 17:35:10

标签: ruby copy-on-write

我读过一些ruby fork COW 友好的地方 好的link

但是当我碰巧google了解更多信息时,我发现Ruby不支持 COW (写入时复制)

现在我实际上有点混淆ruby是否支持 COW 功能

我也知道 REE Rubinius COW友好GC 所以 那是我REE和Rubinius支持 COW 功能

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

由于

1 个答案:

答案 0 :(得分: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中文件的文档,请参阅proc.txt

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