在 Node.js 中,你可以使用多进程的方式来充分利用多核系统的性能。以下是两种常见的实现多进程的方式:

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.zyzy.cn/article/detail/13172/Node.js