本篇文章主要介紹了Node學習記錄之cluster模組,內容挺不錯的,現在分享給大家,也給大家做個參考。
在現今機器的CPU都是多核心的背景下,Node的單執行緒設計已經沒辦法更充分的"壓榨"機器效能了。所以從v0.8開始,Node新增了一個內建模組——“cluster”,故名思議,它可以透過一個父進程管理一坨子進程的方式來實現叢集的功能。
var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; // 获取CPU的个数 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都能監聽到同一個連接埠。但在實際專案中,我們的啟動程式碼一般都已經封裝在app.js中,要把整塊啟動邏輯嵌在上面的if else中實在不優雅。所以,我們可以這樣:
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"); }
簡單之處就在於原本的應用邏輯根本不需要知道自己是在叢集還是單邊。 (當然,如果應用程式在記憶體中維護了某些狀態,例如session,就需要運用某些機制來共享了,這裡不詳說)
#以上就是本文的全部內容,希望對大家的學習有幫助,更多相關內容請關注PHP中文網!
相關推薦:
關於node.js基於fs模組對系統檔案及目錄進行讀寫操作的方法
#
以上是Node中cluster模組的學習的詳細內容。更多資訊請關注PHP中文網其他相關文章!