gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 23:59:16 25 4
gpt4 key购买 nike

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

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

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

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

“Node.js 或您的程序中没有路由逻辑,工作人员之间也没有共享状态。因此,重要的是设计您的程序,使其不会过度依赖内存中的数据对象用于 session 和登录之类的事情。”

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

我的印象是,如果主进程有一个 1 GB 的 JSON 字符串,那么所有子进程也会有该 1 GB JSON 字符串的克隆。所以有两个 child 会使用 3gb 的内存。实际发生了什么?

最佳答案

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

参见:

关于Node.js Clustering- Forking,实际使用了多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42118807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com