单个 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次。