nodejs 获取cpu核心数量_用 NodeJS 充分利用多核 CPU 的资源[每日前端夜话0xCB]
每日前端夜話,陪你聊前端。
每天晚上18:00準時推送。
正文共:1558 字
預計閱讀時間:7?分鐘
作者:Nick Major
翻譯:瘋狂的技術宅
來源:coderrocketfuel
介紹
單個 Node.js 程序的實例僅在一個線程上運行,因此無法充分利用 CPU 的多核系統。有時你可能需要啟動 Node.js 進程集群來利用本地計算機或生產服務器上的每個 CPU 內核。
在處理 API 或基于 ExpressJS 的HTTP服務器時,這個問題尤其重要。
幸運的是,Node.js 有一個名為 Cluster 的核心模塊,它能夠幫助我們在 CPU 的所有核心上運行 Node.js 程序。
在本文中,我們將會用 Node.js 實現一個 ExpressJS HTTP 服務器,并在每個 CPU 內核上創建一個唯一的實例。這樣,由于每個其CPU 核心實例都會提供可能的并發請求數,因此 HTTP 服務器的吞吐量將會大大增加。
讓我們開始吧!
目錄
創建 Express HTTP 服務器
在多個 CPU 核心上運行服務器
創建 Express HTTP 服務器
我們要做的第一件事是啟動并運行 HTTP 服務器。如果你已經有了一個可用的 ExpressJS 服務器,則可以跳至下一部分:在多核 CPU 上運行服務器。
我們將用 ExpressJS 來快速創建一個高效而簡單的服務器。如果尚未安裝 npm 軟件包,則可以用以下命令進行安裝:
1$?npm?install?--save?express然后把下面的代碼添加到要你的的 Node.js 文件中:
1首先,我們 require() 先前安裝的 Express npm 軟件包。
然后,我們創建一個 PORT 變量,該變量可以是當前的 process.env.PORT 的值,也可以是 5000。然后用express() 方法創建一個 express 實例,并將其保存在 app 變量中。
最添加 app.listen() 函數,用于啟動 Express 程序,并告訴它偵聽我們指定的 PORT。
通過命令行運行代碼時,應該看到類似的內容輸出到控制臺:
1Output:很好!現在我們啟動 Express HTTP 服務器。
在多個 CPU 核心上運行服務器
在本節中,我們會把 Express 服務器運行在 CPU 的多個核心上!
為了幫助我們實現這一目標,我們將使用Node.js模塊 OS 和 Cluster 。用 OS 模塊來檢測系統有多少個 CPU 核,用 Cluster 模塊來創建多個子進程,我們的 HTTP 服務器可以并行運行這些子進程。
由于這些是核心模塊,因此不需要安裝任何 npm 包,并且可以將它們 require()到我們的代碼中。
我將為你提供完整的代碼,并在隨后進行解釋,因此,如果你看得一頭霧水,也沒有關系。
這是完整的代碼:
1代碼中做了很多事情,所以讓我們解釋它的每一個部分。
首先是 require() express 包以及 Node.js 的兩個核心模塊 os 和 cluster。
接下來,創建一個 ?PORT ?變量,并為其分配當前 process.env.PORT 編號或 5000 的值。我們稍后將在啟動時用到它。
然后,我們創建一個名為 clusterWorkerSize 的變量來表示系統的 CPU 數量。可以用 os.cpus().length方法獲得這個數字。查看 Node.js 文檔來獲取有關 os.cpus() 方法的更多信息。
我們創建一個了 if...else語句,用 clusterWorkerSize 值檢查 CPU 是否有多個核。如果 CPU 數量大于 1,我們就繼續創建集群。但是如果運行代碼的計算機上只有一個 CPU 核心,則以本教程第一步中的方式啟動 Express 程序。
假設我們的機器有多個 CPU 核心,那么就要創建另一個 if...else 語句,檢查該語句是否為集群中已運行的第一個進程。用 cluster.isMaster() 方法檢查是否返回 true 或 false。
如果是第一個運行的進程,我們將用 cluster.fork() 為計算機上的每個 CPU 核產生一個新的工作進程。我們還添加了一個事件偵聽器,該偵聽器將在工作進程退出時輸出一條消息,以便我們知道何時出現問題或意外。
值得注意的是,主進程用于偵聽 HTTP 服務器的端口,并在工作進程之間平衡所有請求的負載。
產生所有工作進程后,我們將在創建的每個工作進程上創建一個程序的新實例。如果你的計算機有 2 個 CPU 核,則將會創建該程序的 2 個實例。
運行程序時,應該能夠在控制臺上看到以下內容:
1Output:輸出將根據 CPU 核的數量而有所不同。
現在你有了一個能夠在多核 CPU 上運行的 HTTP 服務器!
結論
cluster 模塊使我們能夠輕松創建子進程,從而為 Node.js 提供了使用 CPU 所提供的全部功能所急需的功能。并且它還在后臺為在主進程和工作進程之間進行通信做了大量工作。
在讀完本文之后,你現在應該知道該如何使用這個模塊在多個 CPU 核心上運行 Express HTTP 服務器。有了這些知識,你將能夠更好地管理和擴展你的應用。
原文:https://coderrocketfuel.com/article/run-a-node-js-http-express-js-server-on-multiple-cpu-cores
?
下面夾雜一些私貨:也許你和高薪之間只差這一張圖
2019年京程一燈課程體系上新,這是我們第一次將全部課程列表對外開放。
愿你有個好前程,愿你月薪30K。我們是認真的 !
在公眾號內回復“體系”查看高清大圖
長按二維碼,加大鵬老師微信好友
拉你加入前端技術交流群
嘮一嘮怎樣才能拿高薪
?往期精選?
BootstrapVue 入門
JavaScript的工作原理:引擎、運行時和調用堆棧
用 TypeScript 開發 Node.js 程序
快速上手最新的 Vue CLI 3
JavaScript 程序員可以從C ++中學到些什么
在同一基準下對前端框架進行比較
Edge 擁抱 Chromium 對前端工程師意味著什么?
使你的 JavaScript 代碼簡單易讀
Node.js多線程完全指南
deno如何償還Node.js的十大技術債
實戰!半小時寫一個腦力小游戲
CSS Flexbox 可視化手冊
世界頂級公司的前端面試都問些什么
V8引擎內部機制及優化代碼的5個技巧
小手一抖,資料全有。長按二維碼關注前端先鋒,技術文章和業界動態。
總結
以上是生活随笔為你收集整理的nodejs 获取cpu核心数量_用 NodeJS 充分利用多核 CPU 的资源[每日前端夜话0xCB]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ajax点击事件无法触发,解决jQuer
- 下一篇: android制作相册浏览器_一分钟简单