首頁  >  文章  >  web前端  >  node.js玩轉進程實例

node.js玩轉進程實例

小云云
小云云原創
2018-03-17 16:39:121358瀏覽


本文主要跟大家分享node.js玩轉行程實例,node提供了child_process模組,我們再將經典的範例程式碼存為worker.js文件,如下:

let http=require('http');
http.createServer(function (req,res) {
    res.writeHead(200,{'Content-Type':"text/plain"});
    res.end('hello world')
}).listen(Math.round((1+Math.random())*1000),'127.0.0.1');

將以下程式碼儲存為master.js,並透過node master.js 啟動它:

let fork=require('child_process').fork;
let cpus=require(&#39;os&#39;).cpus();for(let i=0;i<cpus.length;i++){    fork(&#39;./work.js&#39;);
}

在*nix的系統下透過ps aux|grep worker.js查看進程數。
這就是master-worker模式,又稱主從模式。
node.js玩轉進程實例fork複製的程序都是獨立的,這個行程有著獨立而全新的V8實例。 fork進程是昂貴的。

9.2.1 建立子程序

新版的node裡面子行程也有同步子行程與非同步子程序了,這裡指的是異步子程序
- spawn():啟動一個子程序
- exec():啟動一個子進程,與spawn的不同是他有一個回呼函數
- execFile():啟動一個子程序來執行執行檔
- fork():與spawn類似,不同點在於他建立node子程序只需要指定js檔案即可

spawn與exec、execFile的不同是,後兩者建立時可以指定timeout屬性設定逾時時間,時間到之後可以殺死子進程。
exec與execFile不同的是,exec適合執行現有的指令,execFile適合執行檔。

let cp=require(&#39;child_process&#39;);
cp.spawn(&#39;node&#39;,[&#39;worker.js&#39;]);//没有回调函数cp.exec(&#39;node worker.js&#39;,function (err,stdout,stderr) {});
cp.execFile(&#39;worker.js&#39;,function (err,stdout,stderr) {});
cp.fork(&#39;./worker.js&#39;);

9.2.2 進程間通訊

parent.js:

let cp=require(&#39;child_process&#39;);let n=cp.fork(__dirname+ &#39;./worker.js&#39;);
n.on(&#39;message&#39;,function (m) {});
n.send({hello:&#39;world&#39;});

相關推薦:

PHP進程間通訊詳解

以上是node.js玩轉進程實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn