gpt4 book ai didi

node.js - 具有fork函数的node js线程与spawn

转载 作者:搜寻专家 更新时间:2023-11-01 00:39:46 24 4
gpt4 key购买 nike

我知道 node js fork 函数创建了一个新的 V8 实例,而 spawn 函数则没有。如果说 fork 允许您在 node js 中(在多核机器上)使用多线程是否正确,因此 fork 是您的最佳选择想在不影响父脚本性能的情况下执行重负载脚本?

谢谢。

最佳答案

Spawn 是一个旨在运行系统命令的命令。当你运行 spawn 时,你向它发送一个系统命令,该命令将在它自己的进程上运行,但不会在你的 Node 进程中执行任何进一步的代码。您可以为您生成的进程添加监听器,以允许您的代码与生成的进程交互,但不会创建新的 V8 实例(当然除非您的命令是另一个 Node 命令,但在这种情况下您应该使用 fork!)和处理器上只有一个 Node 模块副本处于事件状态。

Fork 是 spawn 的一个特殊实例,它运行 V8 引擎的一个新实例。这意味着,您基本上可以创建多个工作程序,运行在完全相同的 Node 代码库上,或者可能是针对特定任务的不同模块。这对于创建工作池最有用。虽然 Node 异步事件模型允许相当有效地使用机器的单核,但它不允许 Node 进程使用多核机器。实现此目的的最简单方法是在单个处理器上运行同一程序的多个副本。

一个好的经验法则是每个内核一到两个 Node 进程,对于具有良好 ram 时钟/cpu 时钟比率的机器,或者对于 I/O 重而 CPU 工作轻的 Node 进程,可能更多,以最大限度地减少停机事件循环等待新事件的时间。但是,后一个建议是微观优化,需要仔细进行基准测试以确保您的情况适合许多流程/核心的需要。实际上,您可以通过为您的机器/场景生成过多的 worker 来降低性能。

最终,您可以通过向 spawn 发送 Node 命令来以执行上述操作的方式使用 spawn。但这很愚蠢,因为 fork 做了一些事情来优化创建 V8 实例的过程。只是说清楚,最终 spawn 包含 fork。 Fork 正是这个特定且非常有用的用例的最佳选择。

http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

取自 - https://stackoverflow.com/a/17861879/2148827

关于node.js - 具有fork函数的node js线程与spawn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38787361/

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