1. Cluster 模块:
cluster 模块是 Node.js 的一个核心模块,用于创建子进程以充分利用多核 CPU。这个模块使得每个子进程都可以监听相同的端口。下面是一个简单的示例:
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`);
}
在这个例子中,主进程创建了多个子进程,每个子进程都可以独立地处理请求。通过 cluster.fork() 方法,可以创建多个子进程,每个子进程都会执行相同的代码。
2. Child Process 模块:
你还可以使用 child_process 模块创建独立的子进程,每个子进程执行不同的任务。这对于需要执行长时间运行的计算或其他阻塞操作的情况很有用。以下是一个简单的示例:
const { fork } = require('child_process');
const path = require('path');
// 创建子进程
const child = fork(path.join(__dirname, 'child.js'));
// 监听子进程的消息
child.on('message', (message) => {
console.log(`Message from child process: ${message}`);
});
// 向子进程发送消息
child.send('Hello, child process!');
在这个例子中,child.js 是一个简单的子进程脚本,它可以通过 process.on('message', ...) 来监听主进程发送的消息,并通过 process.send(...) 方法向主进程发送消息。
这两种方法都提供了一种在 Node.js 中利用多核系统的方式。选择哪种方法取决于你的具体需求和应用程序的性质。
转载请注明出处:http://www.pingtaimeng.com/article/detail/13172/Node.js