0

0

在 Node.js 中,cluster 模块是如何利用多核 CPU 来扩展应用的?

betcha

betcha

发布时间:2025-09-29 11:49:01

|

905人浏览过

|

来源于php中文网

原创

Node.js通过cluster模块实现多核利用,主进程根据CPU核心数创建多个工作进程,各worker独立监听同一端口并处理请求,操作系统分发连接实现负载均衡,提升并发能力与稳定性。

在 node.js 中,cluster 模块是如何利用多核 cpu 来扩展应用的?

Node.js 是单线程的,这意味着一个 Node 进程只能使用一个 CPU 核心。为了充分利用现代多核 CPU 的性能,Node.js 提供了 cluster 模块,它允许你创建多个工作进程(worker processes),每个进程运行相同的代码并监听同一个端口,从而实现负载均衡和更高的并发处理能力。

主进程与工作进程的协作机制

Cluster 模块通过一个主进程(master)来管理多个工作进程(workers)。主进程不处理具体请求,而是负责创建、监控和重启工作进程。每个工作进程都是一个独立的 Node.js 实例,拥有自己的事件循环和内存空间。

当主进程调用 cluster.fork() 时,就会生成一个新的工作进程。这些工作进程可以共享同一个网络端口。例如,多个 worker 可以同时监听 port 3000操作系统层面会自动将进入的连接分发给不同的进程,实现负载均衡。

如何实现 CPU 多核利用

核心思路是:创建与 CPU 核心数相等的工作进程,让每个核心运行一个进程,最大化资源利用率。

  • 通过 require('os').cpus().length 获取 CPU 核心数量
  • 主进程根据核心数启动对应数量的 worker
  • 每个 worker 独立处理请求,互不阻塞
  • 即使某个 worker 崩溃,主进程可重新 fork 新的实例,提高稳定性

实际使用示例

以下是一个简单的 cluster 使用示例:

Codiga
Codiga

可自定义的静态代码分析检测工具

下载
const cluster = require('cluster');
const http = require('http');
const { cpus } = require('os');

if (cluster.isMaster) {
  const cpuCount = cpus().length;
  for (let i = 0; i     cluster.fork();
  }
} else {
  // 每个 worker 启动服务器
  http.createServer((req, res) => {
    res.end('Hello from worker ' + process.pid);
  }).listen(3000);
}

在这个例子中,每个 worker 都在处理 HTTP 请求,系统自动将请求分配给空闲的 worker,从而提升吞吐量。

内部负载均衡策略

Cluster 模块默认使用轮询(round-robin)方式分发连接(除 Windows 外),也可以设置为基于操作系统的调度策略。这种机制确保请求不会全部堆积在一个进程上,有效分散压力。

值得注意的是,虽然多个 worker 共享端口,但底层是由主进程协调文件描述符的共享,避免端口冲突。

基本上就这些。Cluster 模块让 Node.js 应用轻松突破单核限制,通过多进程模式横向扩展服务能力,是构建高并发应用的重要工具之一。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

738

2023.08.22

require的用法
require的用法

require的用法有引入模块、导入类或方法、执行特定任务。想了解更多require的相关内容,可以阅读本专题下面的文章。

465

2023.11.27

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

523

2023.09.20

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

388

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

571

2023.08.10

length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

918

2023.09.19

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

480

2023.08.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

510

2023.06.20

公务员递补名单公布时间 公务员递补要求
公务员递补名单公布时间 公务员递补要求

公务员递补名单公布时间不固定,通常在面试前,由招录单位(如国家知识产权局、海关等)发布,依据是原入围考生放弃资格,会按笔试成绩从高到低递补,递补考生需按公告要求限时确认并提交材料,及时参加面试/体检等后续环节。要求核心是按招录单位公告及时响应、提交材料(确认书、资格复审材料)并准时参加面试。

1

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.3万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号