node.js - Node.js 中的集群模块

标签 node.js cluster-computing

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`);
}

我们生成的工作线程数量与系统中的核心数量相同。 因此,对于 4 个核心,我们在主进程中生成 4 个工作进程。那么主进程到底在哪里运行,即在哪个核心上?既然 master 将请求路由到工作线程,那么如何确保 master 始终在端口上运行并监听?

最佳答案

这是cpu调度的一部分,操作系统将管理哪个核心应该运行哪个进程。

您可以创建比可用cpu更多的子进程(不建议这样做),因此os将处理哪个cpu核心将运行哪个进程,主进程可以共享cpu有一些子进程。

关于node.js - Node.js 中的集群模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66581215/

相关文章:

javascript - NodeJS, Angular 2 |接下来在 Observable 上执行方法

node.js - 找不到模块 './gm'

user-interface - 具有集群支持的 Redis GUI 工具

java - JVM Clustering如何进行负载均衡。

java - Hazelcast 分布式 map 处理器在单个节点上执行

javascript - JavaScript 中 function() 和 () => 有什么区别

node.js - 使用 NodeJs 将文档插入 Mongodb 返回文档,但它不在集合中

java - Java代码中亲和传播的实现

python - 使用qsub提交连续和独立的作业有多快?

javascript - 使用按钮的 Node JS 服务器请求