<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Node.js 多進程 我們都知道 Node.js 是以單線程的模式運行的,但它使用的是事件驅動來處理并發,這樣有助于我們在多核 cpu 的系統上創建多個子進程,從而提高性能。 每個子進程總是帶有三個流對象:child.stdin, child.stdout 和child.stderr。他們可能會共享父進程的 stdio 流,或者也可以是獨立的被導流的流對象。 Node 提供了 child_process 模塊來創建子進程,方法有: * **exec** - child_process.exec 使用子進程執行命令,緩存子進程的輸出,并將子進程的輸出以回調函數參數的形式返回。 * **spawn** - child_process.spawn 使用指定的命令行參數創建新線程。 * **fork** - child_process.fork 是 spawn()的特殊形式,用于在子進程中運行的模塊,如 fork('./son.js') 相當于 spawn('node', ['./son.js']) 。與spawn方法不同的是,fork會在父進程與子進程之間,建立一個通信管道,用于進程之間的通信。 ## exec() 方法 child_process.exec 使用子進程執行命令,緩存子進程的輸出,并將子進程的輸出以回調函數參數的形式返回。 語法如下所示: ``` child_process.exec(command[, options], callback) ``` ### 參數 參數說明如下: **command:** 字符串, 將要運行的命令,參數使用空格隔開 **options :對象,可以是:** * cwd ,字符串,子進程的當前工作目錄 * env,對象 環境變量鍵值對 * encoding ,字符串,字符編碼(默認: 'utf8') * shell ,字符串,將要執行命令的 Shell(默認: 在 UNIX 中為`/bin/sh`, 在 Windows 中為`cmd.exe`, Shell 應當能識別 `-c`開關在 UNIX 中,或 `/s /c` 在 Windows 中。 在Windows 中,命令行解析應當能兼容`cmd.exe`) * timeout,數字,超時時間(默認: 0) * maxBuffer,數字, 在 stdout 或 stderr 中允許存在的最大緩沖(二進制),如果超出那么子進程將會被殺死 (默認: 200*1024) * killSignal ,字符串,結束信號(默認:'SIGTERM') * uid,數字,設置用戶進程的 ID * gid,數字,設置進程組的 ID **callback :**回調函數,包含三個參數error, stdout 和 stderr。 exec() 方法返回最大的緩沖區,并等待進程結束,一次性返回緩沖區的內容。 ### 實例 讓我們創建兩個 js 文件 support.js 和 master.js。 support.js 文件代碼: ``` console.log("進程 " + process.argv[2] + " 執行。" ); ``` master.js 文件代碼: ``` const fs = require('fs'); const child_process = require('child_process'); for(var i=0; i<3; i++) { var workerProcess = child_process.exec('node support.js '+i, function (error, stdout, stderr) { if (error) { console.log(error.stack); console.log('Error code: '+error.code); console.log('Signal received: '+error.signal); } console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); }); workerProcess.on('exit', function (code) { console.log('子進程已退出,退出碼 '+code); }); } ``` 執行以上代碼,輸出結果為: ``` $ node master.js 子進程已退出,退出碼 0 stdout: 進程 1 執行。 stderr: 子進程已退出,退出碼 0 stdout: 進程 0 執行。 stderr: 子進程已退出,退出碼 0 stdout: 進程 2 執行。 stderr: ``` ## spawn() 方法 child_process.spawn 使用指定的命令行參數創建新線程,語法格式如下: ``` child_process.spawn(command[, args][, options]) ``` ### 參數 參數說明如下: **command:** 將要運行的命令 **args:** Array 字符串參數數組 **options Object** * cwd String 子進程的當前工作目錄 * env Object 環境變量鍵值對 * stdio Array|String 子進程的 stdio 配置 * detached Boolean 這個子進程將會變成進程組的領導 * uid Number 設置用戶進程的 ID * gid Number 設置進程組的 ID spawn() 方法返回流 (stdout & stderr),在進程返回大量數據時使用。進程一旦開始執行時 spawn() 就開始接收響應。 ### 實例 讓我們創建兩個 js 文件 support.js 和 master.js。 support.js 文件代碼: ``` console.log("進程 " + process.argv[2] + " 執行。" ); ``` master.js 文件代碼: ``` const fs = require('fs'); const child_process = require('child_process'); for(var i=0; i<3; i++) { var workerProcess = child_process.spawn('node', ['support.js', i]); workerProcess.stdout.on('data', function (data) { console.log('stdout: ' + data); }); workerProcess.stderr.on('data', function (data) { console.log('stderr: ' + data); }); workerProcess.on('close', function (code) { console.log('子進程已退出,退出碼 '+code); }); } ``` 執行以上代碼,輸出結果為: ``` $ node master.js stdout: 進程 0 執行。 子進程已退出,退出碼 0 stdout: 進程 1 執行。 子進程已退出,退出碼 0 stdout: 進程 2 執行。 子進程已退出,退出碼 0 ``` ## fork 方法 child_process.fork 是 spawn() 方法的特殊形式,用于創建進程,語法格式如下: ``` child_process.fork(modulePath[, args][, options]) ``` ### 參數 參數說明如下: **modulePath**: String,將要在子進程中運行的模塊 **args**: Array 字符串參數數組 **options**:Object * cwd String 子進程的當前工作目錄 * env Object 環境變量鍵值對 * execPath String 創建子進程的可執行文件 * execArgv Array 子進程的可執行文件的字符串參數數組(默認: process.execArgv) * silent Boolean 如果為`true`,子進程的`stdin`,`stdout`和`stderr`將會被關聯至父進程,否則,它們將會從父進程中繼承。(默認為:`false`) * uid Number 設置用戶進程的 ID * gid Number 設置進程組的 ID 返回的對象除了擁有ChildProcess實例的所有方法,還有一個內建的通信信道。 h3>實例 讓我們創建兩個 js 文件 support.js 和 master.js。 support.js 文件代碼: ``` console.log("進程 " + process.argv[2] + " 執行。" ); ``` master.js 文件代碼: ``` const fs = require('fs'); const child_process = require('child_process'); for(var i=0; i<3; i++) { var worker_process = child_process.fork("support.js", [i]); worker_process.on('close', function (code) { console.log('子進程已退出,退出碼 ' + code); }); } ``` 執行以上代碼,輸出結果為: ``` $ node master.js 進程 0 執行。 子進程已退出,退出碼 0 進程 1 執行。 子進程已退出,退出碼 0 進程 2 執行。 子進程已退出,退出碼 0 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看