http://stackabuse.com/setting-up-a-node-js-cluster/ 说
“要清楚,在Node中分叉与POISIX分支非常不同,因为它实际上并不克隆当前进程,但它确实启动了一个新的V8实例。
虽然这是多线程最简单的方法之一,但应谨慎使用。仅仅因为你能够产生1000名工人并不意味着你应该这样做。每个工作者都占用系统资源,因此只生成那些真正需要的系统资源。 Node文档指出,由于每个子进程都是一个新的V8实例,因此每个实例需要30ms的启动时间,每个实例至少需要10mb的内存。“
但是https://nodejs.org/api/cluster.html说
“Node.js或程序中没有路由逻辑,工作者之间没有共享状态。因此,设计程序以使其不太依赖于内存数据对象非常重要对于像会话和登录这样的事情。“
如果工作者(分叉进程)实际上不是主进程的克隆,那么如何也没有共享状态呢?
我的印象是,如果主进程有一个千兆字节的JSON字符串,那么所有子进程也会有一个千兆字节JSON字符串的克隆。所以有两个孩子就会有3GB的内存。实际发生了什么?
答案 0 :(得分:1)
在Linux等人。 OR
使用写时复制语义,即分叉进程的所有内存页面都是共享的(未复制),只有那些进程要修改的页面才会在修改完成之前被复制。因此,即使你有很多分叉进程,如果修改后的数据很接近,也就是使用少量的实际内存页,就可以使用非常少的内存。
请参阅: