国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Node.js多進(jìn)程

sunny5541 / 1531人閱讀

摘要:多進(jìn)程單線程模式運行的,使用事件處理并發(fā)。使用子進(jìn)程的執(zhí)行命令緩存子進(jìn)程的輸出。子進(jìn)程退出進(jìn)程執(zhí)行。子進(jìn)程退出子進(jìn)程退出執(zhí)行異步相當(dāng)魔幻飄忽不定綁定兩個事件設(shè)置退出事件子進(jìn)程退出進(jìn)程執(zhí)行。

Node.js多進(jìn)程
Node.js單線程模式運行的,使用事件處理并發(fā)。

exec()

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

process.argv() 當(dāng)參數(shù)為0時

是node的文件絕對地址

當(dāng)參數(shù)為1時

是該文件的絕對地址

當(dāng)參數(shù)為2時

是命令第一個參數(shù)。

child_process.exec

回調(diào)函數(shù)有三個選項,error, stdout, stderr
error 為程序執(zhí)行的錯誤,正常執(zhí)行會返回一個null
stdout 為程序的正常輸出
stderr 為程序錯誤輸出

/*master.js*/
const fs = require("fs");
const child_process = require("child_process");
 
for(var i=0; i<3; i++) {
    var count = 0;
    var workerProcess = child_process.exec("node support.js " +i, function (err, std, stderr) {
        if (err) {
            console.log(err.stack);
            console.log("Error code: "+err.code);
            console.log("Signal received: "+err.signal);
        }
        console.log("---------------------");
        console.log(i);
        console.log("stdout: " + std);
        console.log("stderr: " + stderr);
    });
 
    workerProcess.on("exit", function (code) {
        console.log("子進(jìn)程已退出,退出碼 "+code);
        console.log("執(zhí)行順序" + count++);
    });
}
/*support.js*/
/*support.js*/
console.log("進(jìn)程 " + process.argv[2] + " 執(zhí)行。" );

執(zhí)行結(jié)果

PS C:UsersmingmDesktop	est> node master.js
子進(jìn)程已退出,退出碼 0
執(zhí)行順序0
---------------------
3
stdout: 進(jìn)程 0 執(zhí)行。

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

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

stderr:
PS C:UsersmingmDesktop	est>

node.js的執(zhí)行為異步執(zhí)行,導(dǎo)致先循環(huán)3次,每次提交。
所以輸出i的值全為3
由于先運行子進(jìn)程,子進(jìn)程執(zhí)行完畢以后,觸發(fā)exit事件,
執(zhí)行

        console.log("子進(jìn)程已退出,退出碼 "+code);
        console.log("執(zhí)行順序" + count++);

該兩句。
接著執(zhí)行

        console.log("---------------------");
        console.log(i);
        console.log("stdout: " + std);
        console.log("stderr: " + stderr);

執(zhí)行完畢。
node最大的特點是異步執(zhí)行。

spawn()方法

同樣也是使用指定的命令行,創(chuàng)建新進(jìn)程。

PS C:UsersmingmDesktop	est> node master.js
stdout進(jìn)程 0 執(zhí)行。

stdout進(jìn)程 1 執(zhí)行。

子進(jìn)程退出0
stdout進(jìn)程 2 執(zhí)行。

子進(jìn)程退出0
子進(jìn)程退出0
PS C:UsersmingmDesktop	est> node master.js
stdout進(jìn)程 0 執(zhí)行。

子進(jìn)程退出0
stdout進(jìn)程 1 執(zhí)行。

stdout進(jìn)程 2 執(zhí)行。

子進(jìn)程退出0
子進(jìn)程退出0
PS C:UsersmingmDesktop	est> node master.js
stdout進(jìn)程 0 執(zhí)行。

stdout進(jìn)程 1 執(zhí)行。

子進(jìn)程退出0
stdout進(jìn)程 2 執(zhí)行。

子進(jìn)程退出0
子進(jìn)程退出0
PS C:UsersmingmDesktop	est>

node執(zhí)行異步相當(dāng)魔幻
飄忽不定

/*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", (data) => {
        console.log("stdout" + data);
    });

    workerProcess.stderr.on("data", (data) => {
        console.log("stderr", + data);
    });

    // 設(shè)置退出事件
    workerProcess.on("close", (code) => {
        console.log("子進(jìn)程退出" + code);
    });
};
/*support.js*/
console.log("進(jìn)程 " + process.argv[2] + " 執(zhí)行。" );

和exec()的區(qū)別在于exec()是直接回調(diào)函數(shù),而spawn()是直接綁定事件

fork()方法
PS C:UsersmingmDesktop	est> node master.js
進(jìn)程 0 執(zhí)行。
進(jìn)程 1 執(zhí)行。
進(jìn)程 2 執(zhí)行。
子進(jìn)程已經(jīng)退出0
子進(jìn)程已經(jīng)退出0
子進(jìn)程已經(jīng)退出0
PS C:UsersmingmDesktop	est>
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", (code) => {
        console.log("子進(jìn)程已經(jīng)退出" + code);
    });
}

還是喜歡fork方法。fork很方便。沒有那么多的異步讓人頭疼。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/96429.html

相關(guān)文章

  • 深入理解Node.js 進(jìn)程與線程(8000長文徹底搞懂)

    摘要:在單核系統(tǒng)之上我們采用單進(jìn)程單線程的模式來開發(fā)。由進(jìn)程來管理所有的子進(jìn)程,主進(jìn)程不負(fù)責(zé)具體的任務(wù)處理,主要工作是負(fù)責(zé)調(diào)度和管理。模塊與模塊總結(jié)無論是模塊還是模塊,為了解決實例單線程運行,無法利用多核的問題而出現(xiàn)的。 前言 進(jìn)程與線程是一個程序員的必知概念,面試經(jīng)常被問及,但是一些文章內(nèi)容只是講講理論知識,可能一些小伙伴并沒有真的理解,在實際開發(fā)中應(yīng)用也比較少。本篇文章除了介紹概念,通過...

    Harpsichord1207 評論0 收藏0
  • 系列3|走進(jìn)Node.js進(jìn)程模型

    摘要:例如,在方法中,如果需要主從進(jìn)程之間建立管道,則通過環(huán)境變量來告知從進(jìn)程應(yīng)該綁定的相關(guān)的文件描述符,這個特殊的環(huán)境變量后面會被再次涉及到。 文:正龍(滬江網(wǎng)校Web前端工程師)本文原創(chuàng),轉(zhuǎn)載請注明作者及出處 之前的文章走進(jìn)Node.js之HTTP實現(xiàn)分析中,大家已經(jīng)了解 Node.js 是如何處理 HTTP 請求的,在整個處理過程,它僅僅用到單進(jìn)程模型。那么如何讓 Web 應(yīng)用擴(kuò)展到...

    snowell 評論0 收藏0
  • Node.js學(xué)習(xí)之路14——Process進(jìn)程

    摘要:在中,只支持單線程。在這種場合下,如果能夠使用多進(jìn)程,則可以為每個請求分配一個進(jìn)程,從而可以更好地使用服務(wù)器端的資源。進(jìn)程進(jìn)程對象的屬性用于運行應(yīng)用程序的可執(zhí)行文件的絕對路徑的版本號及其各依賴的版本號當(dāng)前運行的平臺用于讀入標(biāo)準(zhǔn)輸入流的對象。 Process 在Node.js中,只支持單線程。但是在應(yīng)用程序中,如果只使用單線程進(jìn)行操作,從接收請求開始到返回響應(yīng)為止的這段時間內(nèi)可能存在很長...

    darry 評論0 收藏0
  • [gist]為什么事件驅(qū)動服務(wù)器這么火

    摘要:兩個事件驅(qū)動模型服務(wù)器平均每秒處理的請求數(shù)為服務(wù)器的一倍,而內(nèi)存降低了一半。事件驅(qū)動模型的出現(xiàn),是為了解決傳統(tǒng)服務(wù)器與網(wǎng)絡(luò)工作負(fù)載的需求的不匹配,實現(xiàn)高度可伸縮服務(wù)器,并降低內(nèi)存開銷。 from http://oyanglul.us 本文基本上這為兩篇文章的翻譯和整合 -...

    fsmStudy 評論0 收藏0
  • Node.js運行原理、高并發(fā)性能測試對比及生態(tài)圈匯總

    摘要:模式,單實例多進(jìn)程,常用于多語言混編,比如等,不支持端口復(fù)用,需要自己做應(yīng)用的端口分配和負(fù)載均衡的子進(jìn)程業(yè)務(wù)代碼。就是我們需要一個調(diào)度者,保證所有后端服務(wù)器都將性能充分發(fā)揮,從而保持服務(wù)器集群的整體性能最優(yōu),這就是負(fù)載均衡。 showImg(https://segmentfault.com/img/remote/1460000019425391?w=1440&h=1080); Nod...

    kamushin233 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<