在如今機(jī)器的CPU都是多核的背景下,Node的單線程設(shè)計(jì)已經(jīng)沒(méi)法更充分的"壓榨"機(jī)器性能了。所以從v0.8開(kāi)始,Node新增了一個(gè)內(nèi)置模塊——“cluster”,故名思議,它可以通過(guò)一個(gè)父進(jìn)程管理一坨子進(jìn)程的方式來(lái)實(shí)現(xiàn)集群的功能。
成都創(chuàng)新互聯(lián)堅(jiān)信:善待客戶,將會(huì)成為終身客戶。我們能堅(jiān)持多年,是因?yàn)槲覀円恢笨芍档眯刨?。我們從不忽悠初訪客戶,我們用心做好本職工作,不忘初心,方得始終。十多年網(wǎng)站建設(shè)經(jīng)驗(yàn)成都創(chuàng)新互聯(lián)是成都老牌網(wǎng)站營(yíng)銷(xiāo)服務(wù)商,為您提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、H5開(kāi)發(fā)、網(wǎng)站制作、高端網(wǎng)站設(shè)計(jì)、小程序定制開(kāi)發(fā)服務(wù),給眾多知名企業(yè)提供過(guò)好品質(zhì)的建站服務(wù)。
var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; // 獲取CPU的個(gè)數(shù) if (cluster.isMaster) { for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else { http.createServer(function(req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(8000); }
通過(guò)isMaster屬性,判斷是否Master進(jìn)程,是則fork子進(jìn)程,否則啟動(dòng)一個(gè)server。每個(gè)HTTP server都能監(jiān)聽(tīng)到同一個(gè)端口。但是在實(shí)際項(xiàng)目中,我們的啟動(dòng)代碼一般都已經(jīng)封裝在了app.js中,要把整塊啟動(dòng)邏輯嵌在上面的if else中實(shí)在不優(yōu)雅。 所以,我們可以這樣:
var cluster = require('cluster'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { for (var i = 0; i < numCPUs; i++) { cluster.fork(); } // 其它代碼 } else { require("./app.js"); }
簡(jiǎn)單之處就在于原本的應(yīng)用邏輯根本不需要知道自己是在集群還是單邊。(當(dāng)然,如果應(yīng)用在內(nèi)存中維護(hù)了某些狀態(tài),比如session,就需要運(yùn)用某些機(jī)制來(lái)共享了,這里不詳說(shuō))
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。