这似乎是一个基本问题,但我找不到任何文档:

fork 和fork 的区别是什么;生成一个 node .js流程?我已经读到Forking 是产卵的一种特殊情况,但是使用它们的不同用例/重复影响是什么?

推荐答案

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

Fork是spawn的一个特殊实例,它运行一个新的V8引擎实例.也就是说,您可以创建多个Worker,运行在完全相同的 node 代码库上,或者为特定任务创建不同的模块.这对于创建工作池非常有用.虽然node的异步事件模型允许相当有效地使用机器的单核,但它不允许 node 进程使用多核机器.实现这一点的最简单方法是在单个处理器上运行同一程序的多个副本.

一个好的经验法则是每个核心有一到两个 node 进程,对于ram时钟/cpu时钟比率良好的机器,或者对于I/O工作量大、cpu工作量小的 node 进程,可能会更多,以尽量减少事件循环等待新事件的停机时间.然而,后一种建议是微观优化,需要仔细进行基准测试,以确保您的情况适合许多流程/核心的需要.实际上,您的机器/场景可能会产生太多的工作人员,从而降低性能.

最终,您可以通过发送spawn node 命令,以上述方式使用spawn.但这将是愚蠢的,因为fork做了一些事情来优化创建V8实例的过程.我只是想明确一点,最终的产卵过程包括fork .Fork是这个特别的、非常有用的用例的最佳 Select .

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

Node.js相关问答推荐

意外标识符断言Shopify Remix应用程序

如何使用MongoDB在Node.js 中向数组中添加项?

后端如何保护数据不被用户提取其他用户的数据?

在编译时强制不缩小类型范围

如何在 ElectronJS 中播放音频文件

如何从 Mongo Atlas 触发器向 GCP PubSub 发出经过身份验证的请求

在构建完成后,将AddedFiles文件夹的内容复制到dist文件夹

未捕获的错误: 只能用作 元素的子元素,永远不会直接呈现.请将您的 包裹在

只要我在后端正确验证所有内容,就可以将这些数据存储在本地存储中吗?

如何避免在 mongodb 聚合中查找重复结果?

在快速路由中使用 axios 会在数据字段中返回特殊字符而不是 json

React Native:执行 com.android.build.gradle.internal.tasks.Workers$ActionFacade 时发生故障

更新文档数组中的文档 Mongoose

Mongodb聚合传递一个匹配的数组和一个不匹配的数组

使用 firebase 函数 api 运行套接字(相同的端口创建问题)

使用中的端口代码:'EADDRINUSE',即使在 kill 命令之后

yarn.lock 和 npm 的 package-lock 有什么区别?

如何解决'npm应该在 node repl之外运行,在你的普通shell中'

node.js(ES6 / Babel)中 import X 和 import * as X 的区别?

如何使用 cookie 创建 HTTP 客户端请求?