Node學(xué)習(xí)記錄之cluster模塊
在如今機器的CPU都是多核的背景下,Node的單線程設(shè)計已經(jīng)沒法更充分的"壓榨"機器性能了。所以從v0.8開始,Node新增了一個內(nèi)置模塊——“cluster”,故名思議,它可以通過一個父進程管理一坨子進程的方式來實現(xiàn)集群的功能。
var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; // 獲取CPU的個數(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); }
通過isMaster屬性,判斷是否Master進程,是則fork子進程,否則啟動一個server。每個HTTP server都能監(jiān)聽到同一個端口。但是在實際項目中,我們的啟動代碼一般都已經(jīng)封裝在了app.js中,要把整塊啟動邏輯嵌在上面的if else中實在不優(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"); }
簡單之處就在于原本的應(yīng)用邏輯根本不需要知道自己是在集群還是單邊。(當(dāng)然,如果應(yīng)用在內(nèi)存中維護了某些狀態(tài),比如session,就需要運用某些機制來共享了,這里不詳說)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
npm?install安裝失敗報錯:The?operation?was?rejected?by?your?
這篇文章主要給大家介紹了關(guān)于npm?install安裝失敗報錯:The?operation?was?rejected?by?your?operating?system的相關(guān)資料,文中給出了多種解決方法供大家參考學(xué)習(xí),需要的朋友可以參考下2023-04-04關(guān)于Error:EPERM:operation?not?permitted,mkdir...的幾種解決辦法對比
這篇文章主要給大家介紹了關(guān)于Error:EPERM:operation?not?permitted,mkdir...的幾種解決辦法對比,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-01-01node.JS的crypto加密模塊使用方法詳解(MD5,AES,Hmac,Diffie-Hellman加密)
本文將詳細介紹node.JS的加密模塊crypto實現(xiàn)MD5,AES,Hmac,Diffie-Hellman加密的詳解方法,需要的朋友可以參考下2020-02-02Nginx設(shè)置為Node.js的前端服務(wù)器方法總結(jié)
在本篇文章中小編給大家分享了關(guān)于Nginx設(shè)置為Node.js的前端服務(wù)器的方法和實例,需要的朋友們學(xué)習(xí)下。2019-03-03