为什么 Node.js 有 1.76 Gb 的内存限制?

vuz*_*uza 3 javascript memory v8 node.js

...这背后是否只有一个非常技术性的原因,也许仅仅是因为 V8 的开发没有考虑到服务器端 Javascript?或者是否有与 Node.js 的架构和性质更相关的原因?除了“因为你必须增加内存限制”之外,我是否应该考虑使用 Node.js 进行流式传输和管道传输,而不是用于加载和处理大量数据?

jmr*_*mrk 5

存在限制的主要原因是为了保护系统的其余部分免受失控的内存消费者的影响(即,当您有多个进程在运行时,其中一个进程消耗了它可以获得的所有内存,您希望一个运行到它自己的限制,而不是影响系统中的其他一切)。对于浏览器场景尤其如此(您不希望一个选项卡以牺牲所有其他选项卡为代价来消耗所有内存),但也适用于许多服务器端场景。

限制的默认值或多或少是任意的;对于大多数目的来说,这似乎是一个合理的妥协。如果您需要更多,请随时提出。如果您的应用程序需要它们,现代 V8 版本的 64 位版本(“现代”= 过去几年)支持非常大的堆。

关于您的最后一个问题,“流和管道”通常是处理大量数据的有用技术,无论您使用的是 Node.js 还是任何其他技术。一次性读取所有输入数据的代码往往更容易编写,但总是容易遇到限制:例如,运行它的机器的物理内存大小。您可以通过购买更多内存来“修复”该问题,但是如果您的代码使用流和合理大小的缓冲区,它将能够以更低的硬件要求处理更大的输入数据,甚至可能运行得更快。