在本文中,我们将讨论 Node.js 中spawn() 和 fork() 方法之间的区别。这两种方法都是在 Node.js 中创建子进程以处理不断增加的工作负载。
Spawn()方法:spawn进程在新进程中发起命令。我们可以将命令作为参数传递给它。生成函数的结果是一个实现 EventEmitterAPI 的子流程实例。事件处理程序可以附加或注册到创建的子实例。可以在该子实例上附加或注册的一些事件是断开连接、错误、关闭和消息等。
Parameters: 该方法接受以下参数。
- command:它接受作为字符串运行的命令。
- args: 它是字符串参数的列表。默认值为空数组。
- options: 此选项对象可以具有各种属性,例如 stdio、uid、gid、shell 等。
- shell:接受布尔值。如果为 true,则在 shell 内运行命令。不同的 shell 可以指定为字符串。默认值为 false,这意味着没有 shell。
返回值:它返回子进程的实例。
例子:这是一个非常简单且通用的spawn 使用示例。我们首先需要通过解构产生,然后通过传递参数创建一个子进程。然后在该子进程上注册一个标准输出事件。
Javascript
const { spawn } = require('child_process');
const child = spawn('dir', ['D:\\empty'], { shell: true });
child.stdout.on('data', (data) => {
console.log(`stdout ${data}`);
});
输出:
由于使用了 fork 子进程,从 child.js 发送的消息正在文件 server.js 中打印。
Spawn 和 Fork 子进程的区别:
生成 |
Fork |
---|---|
一旦子进程开始执行,就会开始将数据从子进程发送回父进程。 | 这不会自动发送数据,但我们可以使用全局模块名称process从子进程发送数据,并在父模块中使用子进程的名称发送给子进程。 |
它通过命令创建新进程而不是在同一节点上运行进程。 | 它创建多个单独的进程(子进程),但所有这些进程都与父进程在同一节点进程上运行。 |
在此,不会创建新的 V8 实例。 | 在此,创建了一个新的 V8 实例。 |
当我们希望子进程向父进程返回大量数据时使用它。 | 它用于将 computation-intensive 任务与主事件循环分开。 |
相关用法
- Node.js split()用法及代码示例
- Node.js substr()用法及代码示例
- Node.js shift()用法及代码示例
- Node.js slice()用法及代码示例
- Node.js sort()用法及代码示例
- Node.js stream.Readable.from()用法及代码示例
- Node.js stream.finished()用法及代码示例
- Node.js script.createCachedData()用法及代码示例
- Node.js script.runInNewContext()用法及代码示例
- Node.js script.runInContext()用法及代码示例
- Node.js script.runInThisContext()用法及代码示例
- Node.js stats.isFIFO()用法及代码示例
- Node.js stats.isSymbolicLink()用法及代码示例
- Node.js stat.isSocket()用法及代码示例
- Node.js stringDecoder.end()用法及代码示例
- Node.js stringDecoder.write()用法及代码示例
- Node.js socket.setMulticastInterface()用法及代码示例
- Node.js socket.setMulticastLoopback()用法及代码示例
- Node.js socket.dropMembership()用法及代码示例
- Node.js socket.setBroadcast()用法及代码示例
- Node.js socket.setSendBufferSize()用法及代码示例
- Node.js socket.send()用法及代码示例
- Node.js socket.getSendBufferSize()用法及代码示例
- Node.js socket.address()用法及代码示例
- Node.js socket.remoteAddress()用法及代码示例
注:本文由纯净天空筛选整理自namancourses大神的英文原创作品 Difference between spawn() and fork() methods in Node.js。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。