最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js多進(jìn)程的方法與參數(shù)實(shí)例說明

 更新時(shí)間:2023年05月22日 11:24:28   作者:瘋狂創(chuàng)作者  
這篇文章主要介紹了Node.js多進(jìn)程的方法與參數(shù)實(shí)例說明,Node.js 是以單線程的模式運(yùn)行的,但它使用的是事件驅(qū)動(dòng)來處理并發(fā),這樣有助于我們在多核 cpu 的系統(tǒng)上創(chuàng)建多個(gè)子進(jìn)程,從而提高性能,需要的朋友可以參考下

前言

我們都知道 Node.js 是以單線程的模式運(yùn)行的,但它使用的是事件驅(qū)動(dòng)來處理并發(fā),這樣有助于我們在多核 cpu 的系統(tǒng)上創(chuàng)建多個(gè)子進(jìn)程,從而提高性能。

每個(gè)子進(jìn)程總是帶有三個(gè)流對象:child.stdin, child.stdout 和child.stderr。他們可能會(huì)共享父進(jìn)程的 stdio 流,或者也可以是獨(dú)立的被導(dǎo)流的流對象。

Node 提供了 child_process 模塊來創(chuàng)建子進(jìn)程,方法有:

  • exec - child_process.exec 使用子進(jìn)程執(zhí)行命令,緩存子進(jìn)程的輸出,并將子進(jìn)程的輸出以回調(diào)函數(shù)參數(shù)的形式返回。
  • spawn - child_process.spawn 使用指定的命令行參數(shù)創(chuàng)建新進(jìn)程。
  • fork - child_process.fork 是 spawn()的特殊形式,用于在子進(jìn)程中運(yùn)行的模塊,如 fork('./son.js') 相當(dāng)于 spawn('node', ['./son.js']) 。與spawn方法不同的是,fork會(huì)在父進(jìn)程與子進(jìn)程之間,建立一個(gè)通信管道,用于進(jìn)程之間的通信。

方法說明

exec() 方法

child_process.exec 使用子進(jìn)程執(zhí)行命令,緩存子進(jìn)程的輸出,并將子進(jìn)程的輸出以回調(diào)函數(shù)參數(shù)的形式返回。

語法如下所示:

child_process.exec(command[, options], callback)

參數(shù)

參數(shù)說明如下:

  • command: 字符串, 將要運(yùn)行的命令,參數(shù)使用空格隔開
  • options :對象,可以是:
    • cwd ,字符串,子進(jìn)程的當(dāng)前工作目錄
    • env,對象 環(huán)境變量鍵值對
    • encoding ,字符串,字符編碼(默認(rèn): 'utf8')
    • shell ,字符串,將要執(zhí)行命令的 Shell(默認(rèn): 在 UNIX 中為/bin/sh, 在 Windows 中為cmd.exe, Shell 應(yīng)當(dāng)能識(shí)別 -c開關(guān)在 UNIX 中,或 /s /c 在 Windows 中。 在Windows 中,命令行解析應(yīng)當(dāng)能兼容cmd.exe)
    • timeout,數(shù)字,超時(shí)時(shí)間(默認(rèn): 0)
    • maxBuffer,數(shù)字, 在 stdout 或 stderr 中允許存在的最大緩沖(二進(jìn)制),如果超出那么子進(jìn)程將會(huì)被殺死 (默認(rèn): 200*1024)
    • killSignal ,字符串,結(jié)束信號(hào)(默認(rèn):'SIGTERM')
    • uid,數(shù)字,設(shè)置用戶進(jìn)程的 ID
    • gid,數(shù)字,設(shè)置進(jìn)程組的 ID
  • callback :回調(diào)函數(shù),包含三個(gè)參數(shù)error, stdout 和 stderr。
  • exec() 方法返回最大的緩沖區(qū),并等待進(jìn)程結(jié)束,一次性返回緩沖區(qū)的內(nèi)容。

實(shí)例

讓我們創(chuàng)建兩個(gè) js 文件 support.js 和 master.js。

support.js 文件代碼:

console.log("進(jìn)程 " + process.argv[2] + " 執(zhí)行。" );

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('子進(jìn)程已退出,退出碼 '+code); 
            }); 
}

執(zhí)行以上代碼,輸出結(jié)果為:

$ node master.js 
子進(jìn)程已退出,退出碼 0
stdout: 進(jìn)程 1 執(zhí)行。

stderr: 
子進(jìn)程已退出,退出碼 0
stdout: 進(jìn)程 0 執(zhí)行。

stderr: 
子進(jìn)程已退出,退出碼 0
stdout: 進(jìn)程 2 執(zhí)行。

stderr:

spawn() 方法

child_process.spawn 使用指定的命令行參數(shù)創(chuàng)建新進(jìn)程,語法格式如下:

child_process.spawn(command[, args][, options])

參數(shù)

參數(shù)說明如下:

  • command: 將要運(yùn)行的命令
  • args: Array 字符串參數(shù)數(shù)組
  • options Object
    • cwd String 子進(jìn)程的當(dāng)前工作目錄
    • env Object 環(huán)境變量鍵值對
    • stdio Array|String 子進(jìn)程的 stdio 配置
    • detached Boolean 這個(gè)子進(jìn)程將會(huì)變成進(jìn)程組的領(lǐng)導(dǎo)
    • uid Number 設(shè)置用戶進(jìn)程的 ID
    • gid Number 設(shè)置進(jìn)程組的 ID
  • spawn() 方法返回流 (stdout & stderr),在進(jìn)程返回大量數(shù)據(jù)時(shí)使用。進(jìn)程一旦開始執(zhí)行時(shí) spawn() 就開始接收響應(yīng)。

實(shí)例

讓我們創(chuàng)建兩個(gè) js 文件 support.js 和 master.js。

support.js 文件代碼:

console.log("進(jìn)程 " + process.argv[2] + " 執(zhí)行。" );

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('子進(jìn)程已退出,退出碼 '+code); 
                    }); 
}

執(zhí)行以上代碼,輸出結(jié)果為:

$ node master.js stdout: 進(jìn)程 0 執(zhí)行。
子進(jìn)程已退出,退出碼 0
stdout: 進(jìn)程 1 執(zhí)行。
子進(jìn)程已退出,退出碼 0
stdout: 進(jìn)程 2 執(zhí)行。
子進(jìn)程已退出,退出碼 0

fork 方法

child_process.fork 是 spawn() 方法的特殊形式,用于創(chuàng)建進(jìn)程,語法格式如下:

child_process.fork(modulePath[, args][, options])

參數(shù)

參數(shù)說明如下:

  • modulePath: String,將要在子進(jìn)程中運(yùn)行的模塊
  • args: Array 字符串參數(shù)數(shù)組
  • options:Object
    • cwd String 子進(jìn)程的當(dāng)前工作目錄
    • env Object 環(huán)境變量鍵值對
    • execPath String 創(chuàng)建子進(jìn)程的可執(zhí)行文件
    • execArgv Array 子進(jìn)程的可執(zhí)行文件的字符串參數(shù)數(shù)組(默認(rèn): process.execArgv)
    • silent Boolean 如果為true,子進(jìn)程的stdin,stdout和stderr將會(huì)被關(guān)聯(lián)至父進(jìn)程,否則,它們將會(huì)從父進(jìn)程中繼承。(默認(rèn)為:false)
    • uid Number 設(shè)置用戶進(jìn)程的 ID
    • gid Number 設(shè)置進(jìn)程組的 ID

返回的對象除了擁有ChildProcess實(shí)例的所有方法,還有一個(gè)內(nèi)建的通信信道。

實(shí)例

讓我們創(chuàng)建兩個(gè) js 文件 support.js 和 master.js。

support.js 文件代碼:

console.log("進(jìn)程 " + process.argv[2] + " 執(zhí)行。" );

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('子進(jìn)程已退出,退出碼 ' + code); 
        }); 
}

執(zhí)行以上代碼,輸出結(jié)果為:

$ node master.js 
進(jìn)程 0 執(zhí)行。
子進(jìn)程已退出,退出碼 0
進(jìn)程 1 執(zhí)行。
子進(jìn)程已退出,退出碼 0
進(jìn)程 2 執(zhí)行。
子進(jìn)程已退出,退出碼 0

到此這篇關(guān)于Node.js多進(jìn)程的方法與參數(shù)實(shí)例說明的文章就介紹到這了,更多相關(guān)Node.js多進(jìn)程的方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nodejs之http的表單提交

    Nodejs之http的表單提交

    這篇文章主要為大家詳細(xì)介紹了Nodejs之http的表單提交,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Node.js?實(shí)現(xiàn)簡單爬蟲的示例代碼

    Node.js?實(shí)現(xiàn)簡單爬蟲的示例代碼

    本文主要介紹了Node.js?實(shí)現(xiàn)簡單爬蟲,爬取美食網(wǎng)站的菜品標(biāo)題和圖片鏈接,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • node?NPM庫string-random生成隨機(jī)字符串學(xué)習(xí)使用

    node?NPM庫string-random生成隨機(jī)字符串學(xué)習(xí)使用

    這篇文章主要為大家介紹了node?NPM庫string-random生成隨機(jī)字符串學(xué)習(xí)使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Node.js模擬發(fā)起http請求從異步轉(zhuǎn)同步的5種用法

    Node.js模擬發(fā)起http請求從異步轉(zhuǎn)同步的5種用法

    這篇文章主要介紹了Node.js模擬發(fā)起http請求從異步轉(zhuǎn)同步的5種方法,下面總結(jié)了幾個(gè)常見的庫 API 從異步轉(zhuǎn)同步的幾種方法。需要的朋友可以參考下
    2018-09-09
  • 前端自動(dòng)化開發(fā)之Node.js的環(huán)境搭建教程

    前端自動(dòng)化開發(fā)之Node.js的環(huán)境搭建教程

    這篇文章主要介紹了前端自動(dòng)化開發(fā)之Node.js環(huán)境搭建的相關(guān)資料,文中介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用node.js具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • node中短信api實(shí)現(xiàn)驗(yàn)證碼登錄的示例代碼

    node中短信api實(shí)現(xiàn)驗(yàn)證碼登錄的示例代碼

    這篇文章主要介紹了node中短信api實(shí)現(xiàn)驗(yàn)證碼登錄的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 一文詳解NodeJS和Javascript之間有什么區(qū)別

    一文詳解NodeJS和Javascript之間有什么區(qū)別

    在前端和后端開發(fā)的技術(shù)棧中,JavaScript?和?Node.js?經(jīng)常是新手和經(jīng)驗(yàn)豐富的開發(fā)者討論的熱門話題,這篇文章主要介紹了NodeJS和Javascript之間有什么區(qū)別的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11
  • Nodejs中的this詳解

    Nodejs中的this詳解

    本文給大家匯總介紹了下nodejs中的this,nodejs中的this和在瀏覽器中javascript中的this還是有很大的差異的,小伙伴們可以研究下
    2016-03-03
  • 詳解Nodejs 通過 fs.createWriteStream 保存文件

    詳解Nodejs 通過 fs.createWriteStream 保存文件

    本篇文章主要介紹了Nodejs 通過 fs.createWriteStream 保存文件,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • node連接MongoDB數(shù)據(jù)庫錯(cuò)誤:MongoServerSelectionError:?connect?ECONNREFUSED?::1:27017(解決方案)

    node連接MongoDB數(shù)據(jù)庫錯(cuò)誤:MongoServerSelectionError:?connect?ECON

    使用node連接MongoDB數(shù)據(jù)庫時(shí)發(fā)生報(bào)錯(cuò),MongoServerSelectionError:?connect?ECONNREFUSED?::1:27017,本文給大家分享原因分析及解決方案,感興趣的朋友跟隨小編一起看看吧
    2023-04-04

最新評論

延庆县| 德安县| 望城县| 温宿县| 东方市| 桓台县| 沙田区| 莲花县| 临沧市| 秭归县| 手机| 酉阳| 新平| 桦川县| 津市市| 盈江县| 安图县| 井研县| 周至县| 乌鲁木齐县| 浦江县| 胶南市| 会同县| 建始县| 灵宝市| 新郑市| 尤溪县| 松阳县| 哈巴河县| 高平市| 南木林县| 凤冈县| 马鞍山市| 朔州市| 崇州市| 郁南县| 余江县| 伊宁县| 建昌县| 陇南市| 诸城市|