本文主要和大家分享node.js玩轉(zhuǎn)進(jìn)程實(shí)例,node提供了child_process模塊,我們?cè)賹⒔?jīng)典的示例代碼存為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 啟動(dòng)它:
let fork=require('child_process').fork; let cpus=require('os').cpus();for(let i=0;i<cpus.length;i++){ fork('./work.js'); }
在*nix的系統(tǒng)下通過ps aux|grep worker.js查看進(jìn)程數(shù)量。
這就是master-worker模式,又稱主從模式。 fork復(fù)制的進(jìn)程都是獨(dú)立的,這個(gè)進(jìn)程有著獨(dú)立而全新的V8實(shí)例。fork進(jìn)程是昂貴的。
新版的node里面子進(jìn)程也有同步子進(jìn)程和異步子進(jìn)程了,這里指的是異步子進(jìn)程
- spawn():啟動(dòng)一個(gè)子進(jìn)程
- exec():啟動(dòng)一個(gè)子進(jìn)程,與spawn的不同是他有一個(gè)回調(diào)函數(shù)
- execFile():啟動(dòng)一個(gè)子進(jìn)程來執(zhí)行可執(zhí)行文件
- fork():與spawn類似,不同點(diǎn)在于他創(chuàng)建node子進(jìn)程只需要指定js文件即可
spawn與exec、execFile的不同是,后兩者創(chuàng)建時(shí)可以指定timeout屬性設(shè)置超時(shí)時(shí)間,時(shí)間到之后可以殺死子進(jìn)程。
exec與execFile不同的是,exec適合執(zhí)行已有的命令,execFile適合執(zhí)行文件。
let cp=require('child_process'); cp.spawn('node',['worker.js']);//沒有回調(diào)函數(shù)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'});
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com