當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Node.js spawn()和fork()的區別用法及代碼示例


在本文中,我們將討論 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 任務與主事件循環分開。

相關用法


注:本文由純淨天空篩選整理自namancourses大神的英文原創作品 Difference between spawn() and fork() methods in Node.js。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。