国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Node.js中的cluster模塊深入解讀

2024-05-06 15:33:27
字體:
供稿:網(wǎng)友

預備知識

在如今機器的CPU都是多核的背景下,Node的單線程設(shè)計已經(jīng)沒法更充分的"壓榨"機器性能了。所以從v0.8開始,Node新增了一個內(nèi)置模塊——“cluster”,故名思議,它可以通過一個父進程管理一坨子進程的方式來實現(xiàn)集群的功能。

學習cluster之前,需要了解process相關(guān)的知識,如果不了解的話建議先閱讀process模塊、child_process模塊。

cluster借助child_process模塊的fork()方法來創(chuàng)建子進程,通過fork方式創(chuàng)建的子進程與父進程之間建立了IPC通道,支持雙向通信。

cluster模塊最早出現(xiàn)在node.js v0.8版本中

為什么會存在cluster模塊?

Node.js是單線程的,那么如果希望利用服務器的多核的資源的話,就應該多創(chuàng)建幾個進程,由多個進程共同提供服務。如果直接采用下列方式啟動多個服務的話,會提示端口占用。

const http = require('http');http.createServer((req, res) => { res.writeHead(200); res.end('hello world/n');}).listen(8000);// 啟動第一個服務 node index.js &// 啟動第二個服務 node index.js & throw er; // Unhandled 'error' event ^Error: listen EADDRINUSE :::8000 at Server.setupListenHandle [as _listen2] (net.js:1330:14) at listenInCluster (net.js:1378:12) at Server.listen (net.js:1465:7) at Object.<anonymous> (/Users/xiji/workspace/learn/node-basic/cluster/simple.js:5:4) at Module._compile (internal/modules/cjs/loader.js:702:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10) at Module.load (internal/modules/cjs/loader.js:612:32) at tryModuleLoad (internal/modules/cjs/loader.js:551:12) at Function.Module._load (internal/modules/cjs/loader.js:543:3) at Function.Module.runMain (internal/modules/cjs/loader.js:744:10)

如果改用cluster的話就沒有問題

const cluster = require('cluster');const http = require('http');const numCPUs = require('os').cpus().length;if (cluster.isMaster) { console.log(`Master ${process.pid} is running`); // Fork workers. for (let i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', (worker, code, signal) => { console.log(`worker ${worker.process.pid} died`); });} else { // Workers can share any TCP connection // In this case it is an HTTP server http.createServer((req, res) => { res.writeHead(200); res.end('hello world/n'); }).listen(8000); console.log(`Worker ${process.pid} started`);}// node index.js 執(zhí)行完啟動了一個主進程和8個子進程(子進程數(shù)與cpu核數(shù)相一致)Master 11851 is runningWorker 11852 startedWorker 11854 startedWorker 11853 startedWorker 11855 startedWorker 11857 startedWorker 11858 startedWorker 11856 startedWorker 11859 started

cluster是如何實現(xiàn)多進程共享端口的?

cluster創(chuàng)建的進程分兩種,父進程和子進程,父進程只有一個,子進程有多個(一般根據(jù)cpu核數(shù)創(chuàng)建)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 英山县| 汽车| 偃师市| 田东县| 隆尧县| 北票市| 保靖县| 曲阜市| 固安县| 青岛市| 南阳市| 盐山县| 中阳县| 璧山县| 海淀区| 科技| 岳阳县| 蓬莱市| 修水县| 乌审旗| 宣汉县| 镶黄旗| 恩施市| 永川市| 济南市| 盐亭县| 磴口县| 麦盖提县| 伽师县| 上高县| 株洲县| 南通市| 迭部县| 进贤县| 丹江口市| 呼和浩特市| 长垣县| 靖安县| 三都| 福鼎市| 祁门县|