單個 Node.js 實例運行在單個線程中。 爲了充分利用多核系統,有時需要啓用一組 Node.js 進程去處理負載任務。
cluster
模塊可以創建共享服務器端口的子進程。
具體代碼如下圖所示:
// const 定義常量,var定義變量
const cluster = require("cluster");
const http = require("http");
const numCpus = require("os").cpus().length;
console.log(numCpus + ", 幾個都會執行");
const name = '描述';
console.warn(`警告${name}`);
if (cluster.isMaster) {
console.log(`進程${process.pid}正在運行`);
// 衍生工作進程,主進程執行完之後還會再執行numCpus次
for (var i = 0; i< numCpus; i++) {
cluster.fork();
}
cluster.on("exit", function (worker, code, singal) {
console.log("工作進程${worker.process.pid}已退出")
});
} else {
// 工作進程可以共享任何TCP鏈接,本例子中共享的http服務器
http.createServer(function (request, response) {
// 返回200代碼正常響應
response.writeHead(200);
response.end("Htllo World!\n");
}).listen(8080);
console.log(`工作進程 ${process.pid} 已啓動`);
}
最終的執行結果爲:
4, 幾個都會執行
警告描述
進程15544正在運行
警告描述
4, 幾個都會執行
工作進程 16532 已啓動
4, 幾個都會執行
工作進程 16388 已啓動
4, 幾個都會執行
警告描述
警告描述
工作進程 16600 已啓動
4, 幾個都會執行
警告描述
工作進程 11068 已啓動
從上面我們可以看得出來,cpu爲4核,下面的cluster的fork方法讓程序多打印了4次。