本文主要跟大家分享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('os').cpus();for(let i=0;i<cpus.length;i++){ fork('./work.js'); }
在*nix的系統下透過ps aux|grep worker.js查看進程數。
這就是master-worker模式,又稱主從模式。
fork複製的程序都是獨立的,這個行程有著獨立而全新的V8實例。 fork進程是昂貴的。
新版的node裡面子行程也有同步子行程與非同步子程序了,這裡指的是異步子程序
- spawn():啟動一個子程序
- exec():啟動一個子進程,與spawn的不同是他有一個回呼函數
- execFile():啟動一個子程序來執行執行檔
- fork():與spawn類似,不同點在於他建立node子程序只需要指定js檔案即可
spawn與exec、execFile的不同是,後兩者建立時可以指定timeout屬性設定逾時時間,時間到之後可以殺死子進程。
exec與execFile不同的是,exec適合執行現有的指令,execFile適合執行檔。
let cp=require('child_process'); cp.spawn('node',['worker.js']);//没有回调函数cp.exec('node worker.js',function (err,stdout,stderr) {}); cp.execFile('worker.js',function (err,stdout,stderr) {}); cp.fork('./worker.js');
parent.js:
let cp=require('child_process');let n=cp.fork(__dirname+ './worker.js'); n.on('message',function (m) {}); n.send({hello:'world'});
相關推薦:
以上是node.js玩轉進程實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!