亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

nodejs基礎之多進程實例詳解

2024-05-06 16:47:19
字體:
來源:轉載
供稿:網友

本文實例講述了nodejs基礎之多進程。分享給大家供大家參考,具體如下:

Node.js 多進程

我們都知道 Node.js 是以單線程的模式運行的,但它使用的是事件驅動來處理并發,這樣有助于我們在多核 cpu 的系統上創建多個子進程,從而提高性能。

每個子進程總是帶有三個流對象:child.stdinchild.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

希望本文所述對大家nodejs程序設計有所幫助。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人黄色在线| 国产精品久久久久av| 国产精品久久久久久婷婷天堂| 国产欧美在线观看| 亚洲激情视频网| 亚洲一区二区日本| 国产日韩中文字幕在线| 韩国国内大量揄拍精品视频| 国产精品丝袜久久久久久高清| 91在线免费网站| 97视频在线观看视频免费视频| 伊是香蕉大人久久| 欧美精品在线免费播放| 91人人爽人人爽人人精88v| 色与欲影视天天看综合网| 国产精品嫩草影院一区二区| 91免费精品国偷自产在线| 中文字幕成人精品久久不卡| 中文字幕综合在线| 亚洲最大福利视频网站| 国产亚洲精品va在线观看| 欧美猛交免费看| www.xxxx精品| 精品女厕一区二区三区| 97精品一区二区三区| 麻豆国产va免费精品高清在线| 亚洲国产古装精品网站| 日韩av免费观影| 欧美成人精品一区二区| 国产精品偷伦视频免费观看国产| 国产精品福利在线| 欧美日本啪啪无遮挡网站| 青青草原一区二区| 欧美激情精品久久久久久变态| 久久久久久999| zzjj国产精品一区二区| 亚洲人成在线观看| 久久99精品久久久久久噜噜| 国产欧洲精品视频| 热re91久久精品国99热蜜臀| 亚洲最大激情中文字幕| 国产99久久久欧美黑人| 欧美大片第1页| 不卡av电影在线观看| 久久99青青精品免费观看| 欧美在线一区二区三区四| 久久久久一本一区二区青青蜜月| 欧美影院成年免费版| 91伊人影院在线播放| 亚洲最新av在线网站| 69视频在线播放| 国产成人啪精品视频免费网| 国产99久久精品一区二区永久免费| 欧美裸体xxxx极品少妇软件| 姬川优奈aav一区二区| 国产在线观看精品一区二区三区| 九九精品视频在线| 国产主播喷水一区二区| 亚洲国产黄色片| 九九热r在线视频精品| 亚洲免费成人av电影| 91av网站在线播放| 国产欧美一区二区三区在线| 亚洲欧美一区二区精品久久久| 日韩视频免费在线| 亚洲电影免费观看高清| 日韩精品久久久久| 欧美电影免费观看电视剧大全| 伊人久久精品视频| 色天天综合狠狠色| 亚洲精品日韩在线| 亚洲国产女人aaa毛片在线| 亚洲天堂av图片| 亚洲综合色av| 亚洲国产日韩欧美在线动漫| 亚洲欧美日韩天堂一区二区| 久久久之久亚州精品露出| 国产精品91在线观看| 亚洲综合第一页| 亚洲电影免费在线观看| 91在线视频九色| 91人成网站www| 一区二区三区天堂av| 日本一区二区三区在线播放| 91夜夜揉人人捏人人添红杏| 欧美激情视频网址| 欧美激情小视频| 国产成人精品午夜| 日韩精品免费视频| 亚洲精品大尺度| 国产精品pans私拍| 久久久久久久久久av| 日本伊人精品一区二区三区介绍| 欧美大尺度电影在线观看| 亚洲自拍偷拍第一页| 欧美一区二区色| 久久人91精品久久久久久不卡| 中文字幕亚洲在线| 欧美另类极品videosbest最新版本| 国产日韩综合一区二区性色av| 亚洲va电影大全| 97色在线视频| 亚洲日本中文字幕| 国产91精品久| 久久精品视频va| 久久久久久亚洲精品中文字幕| 国产精品主播视频| 欧美日韩国产专区| 国产69久久精品成人看| 欧美日韩在线观看视频| 亚洲xxx自由成熟| 成人免费网站在线观看| 日韩av观看网址| 久久久久久午夜| 日韩一区二区精品视频| 亚洲va欧美va国产综合久久| 国产精品偷伦免费视频观看的| 亚洲精品一区二三区不卡| 欧美视频13p| 在线观看日韩av| 国产欧美精品一区二区三区介绍| 国语自产在线不卡| 欧美日本国产在线| 国产日韩精品视频| 国产精品视频久久久| 精品国产91久久久| 最近2019中文字幕一页二页| 欧美国产日韩一区二区| 亚洲第一视频网站| 国产香蕉97碰碰久久人人| 2018日韩中文字幕| 成人免费高清完整版在线观看| 色婷婷av一区二区三区在线观看| 亚洲97在线观看| 国内精品久久久久影院优| 欧美激情图片区| 国产精品一二三视频| 精品视频—区二区三区免费| 6080yy精品一区二区三区| 亚洲国产另类 国产精品国产免费| 国产免费亚洲高清| 国产不卡精品视男人的天堂| 亚洲精品中文字幕有码专区| 日韩免费在线免费观看| 国产一区二区三区在线观看网站| 国产视频观看一区| 欧美激情视频给我| 欧美午夜激情小视频| 免费不卡在线观看av| 欧美在线精品免播放器视频| 欧美成人四级hd版| 欧美成人精品h版在线观看| 欧美国产精品va在线观看| 欧美视频在线看| 亚洲国产中文字幕久久网| 欧美日韩亚洲天堂| 国产成人av网址| 亚洲成**性毛茸茸| 日韩av片电影专区| 欧美日韩精品中文字幕| 欧美大片在线看免费观看| 欧美日韩国产精品一区二区不卡中文| 欧美日韩加勒比精品一区| 91夜夜揉人人捏人人添红杏|