Node.js Clustering- Forking,实际使用了多少内存?

Node.js Clustering- Forking, how much memory is actually used?

http://stackabuse.com/setting-up-a-node-js-cluster/

" 需要明确的是,Node 中的分叉与 POISIX 分叉非常不同,因为它实际上并不克隆当前进程,但它确实启动了一个新的 V8 实例。

尽管这是 multi-thread 最简单的方法之一,但应谨慎使用。仅仅因为您能够产生 1,000 个工人并不意味着您应该这样做。每个 worker 都会占用系统资源,因此只生成真正需要的那些。 Node 文档指出,由于每个 child 进程都是一个新的 V8 实例,因此每个实例需要 30 毫秒的启动时间和至少 10mb 的内存。"

但是 https://nodejs.org/api/cluster.html

"There is no routing logic in Node.js, or in your program, and no shared state between the workers. Therefore, it is important to design your program such that it does not rely too heavily on in-memory data objects for things like sessions and login."

如果工作人员(分叉进程)实际上不是主进程的克隆,那么为什么也没有共享状态?

我的印象是,如果主进程有一个 1 GB 的 JSON 字符串,那么所有 child 进程也会有那个 1 GB 的 JSON 字符串的克隆。因此,使用两个 children 将使用 3gb 的内存。究竟发生了什么?

关于 Linux 等人。 fork() 使用 copy-on-write 语义,即分叉进程的所有内存页都是共享的(不是复制),只有进程想要修改的那些页在修改完成之前被复制。因此,即使您有很多分叉进程,如果您修改的数据靠得很近,也可能使用很少的内存,即它使用少量的实际内存页。

参见: