我读过一些红宝石叉子对牛友好的地方,好的链接
但是当我碰巧在谷歌上搜索更多信息时,我发现 Ruby 不支持COW(写入时复制)
现在我实际上有点困惑 ruby 是否真的支持COW功能
我也知道REE和Rubinius有一个COW 友好的 GC,所以我 REE 和 Rubinius 支持COW功能
我是的,我很想测试它,任何人都可以建议我,如果 ruby 支持COW功能,那么如何编写示例代码来测试Ruby 中的 COW 概念
谢谢
我读过一些红宝石叉子对牛友好的地方,好的链接
但是当我碰巧在谷歌上搜索更多信息时,我发现 Ruby 不支持COW(写入时复制)
现在我实际上有点困惑 ruby 是否真的支持COW功能
我也知道REE和Rubinius有一个COW 友好的 GC,所以我 REE 和 Rubinius 支持COW功能
我是的,我很想测试它,任何人都可以建议我,如果 ruby 支持COW功能,那么如何编写示例代码来测试Ruby 中的 COW 概念
谢谢
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 看到这一点。