Node學(xué)習(xí)記錄之cluster模塊
在如今機(jī)器的CPU都是多核的背景下,Node的單線程設(shè)計(jì)已經(jīng)沒法更充分的"壓榨"機(jī)器性能了。所以從v0.8開始,Node新增了一個(gè)內(nèi)置模塊——“cluster”,故名思議,它可以通過一個(gè)父進(jìn)程管理一坨子進(jìn)程的方式來實(shí)現(xiàn)集群的功能。
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); }
通過isMaster屬性,判斷是否Master進(jìn)程,是則fork子進(jìn)程,否則啟動(dòng)一個(gè)server。每個(gè)HTTP server都能監(jiān)聽到同一個(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ī)制來共享了,這里不詳說)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- node.js使用cluster實(shí)現(xiàn)多進(jìn)程
- 使用cluster 將自己的Node服務(wù)器擴(kuò)展為多線程服務(wù)器
- Nodejs中解決cluster模塊的多進(jìn)程如何共享數(shù)據(jù)問題
- node.js中cluster的使用教程
- Node.js中多進(jìn)程模塊Cluster的介紹與使用
- node 利用進(jìn)程通信實(shí)現(xiàn)Cluster共享內(nèi)存
- 深入剖析Node.js cluster模塊
- 淺談node中的cluster集群
- 詳解通過源碼解析Node.js中cluster模塊的主要功能實(shí)現(xiàn)
- Node.js中的cluster模塊深入解讀
相關(guān)文章
npm?install安裝失敗報(bào)錯(cuò):The?operation?was?rejected?by?your?
這篇文章主要給大家介紹了關(guān)于npm?install安裝失敗報(bào)錯(cuò):The?operation?was?rejected?by?your?operating?system的相關(guān)資料,文中給出了多種解決方法供大家參考學(xué)習(xí),需要的朋友可以參考下2023-04-04關(guān)于Error:EPERM:operation?not?permitted,mkdir...的幾種解決辦法對(duì)比
這篇文章主要給大家介紹了關(guān)于Error:EPERM:operation?not?permitted,mkdir...的幾種解決辦法對(duì)比,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-01-01node.JS的crypto加密模塊使用方法詳解(MD5,AES,Hmac,Diffie-Hellman加密)
本文將詳細(xì)介紹node.JS的加密模塊crypto實(shí)現(xiàn)MD5,AES,Hmac,Diffie-Hellman加密的詳解方法,需要的朋友可以參考下2020-02-02nodejs中函數(shù)的調(diào)用實(shí)例詳解
本文通過實(shí)例代碼給大家介紹了nodejs函數(shù)的調(diào)用,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10Node.js實(shí)現(xiàn)簡(jiǎn)單的爬取的示例代碼
這篇文章主要介紹了Node.js實(shí)現(xiàn)簡(jiǎn)單的爬取的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Nginx設(shè)置為Node.js的前端服務(wù)器方法總結(jié)
在本篇文章中小編給大家分享了關(guān)于Nginx設(shè)置為Node.js的前端服務(wù)器的方法和實(shí)例,需要的朋友們學(xué)習(xí)下。2019-03-03