国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表

圖片精選

主站蜘蛛池模板: 鄂尔多斯市| 中阳县| 阳信县| 普洱| 卢湾区| 会东县| 阿克苏市| 东明县| 阿拉善盟| 青岛市| 广丰县| 南昌县| 广宁县| 水富县| 邯郸县| 雷州市| 南阳市| 农安县| 车致| 鹤庆县| 色达县| 敖汉旗| 双牌县| 黄浦区| 宜都市| 桓台县| 建德市| 海口市| 胶南市| 绍兴县| 靖安县| 万源市| 桂林市| 五原县| 镇巴县| 建阳市| 五指山市| 福泉市| 潜山县| 洛宁县| 新干县|