当前位置: 首页 > news >正文

nodejs获取可用cpu数

os.availableParallelism() 是 Node.js 20.3.0 及以上版本提供的 API,用于获取系统当前可用的并行计算单元数量。以下是详细说明:


功能特性

  1. 动态检测
    返回系统当前可用的逻辑 CPU 核心数,可能受以下因素影响:

    • 进程的 CPU 亲和性设置(如通过 taskset 绑定核心)
    • 容器化环境的资源限制(如 Docker 的 --cpus 参数)
    • 云环境的资源配额
  2. os.cpus().length 的区别

    • os.cpus().length:返回物理机的全部逻辑核心数
    • os.availableParallelism():返回当前环境实际可用的核心数

使用场景

const os = require('os');// 动态配置线程池大小
const workerPoolSize = os.availableParallelism();
console.log(`建议使用 ${workerPoolSize} 个工作线程`);// 容器化部署时验证资源限制
if (workerPoolSize < 4) {console.warn('警告:可用 CPU 核心不足,可能影响性能');
}// 负载均衡策略
const tasksPerWorker = Math.ceil(totalTasks / workerPoolSize);

示例输出

环境场景os.cpus().lengthos.availableParallelism()
物理机(16 核)1616
Docker 限制 4 核164
AWS Lambda(2 vCPU)22
taskset -c 0-3 绑定164

兼容性处理

// 安全访问建议
const availableCores = typeof os.availableParallelism === 'function' ? os.availableParallelism() : os.cpus().length;// 最低保障策略
const MAX_WORKERS = Math.max(availableCores, 2); // 至少 2 个线程

底层原理

  1. Linux/macOS
    通过 sched_getaffinity 系统调用获取进程绑定的 CPU 掩码

  2. Windows
    使用 GetProcessAffinityMask API 检测可用处理器

  3. 容器环境
    自动识别 cgroups v1/v2 的 CPU 配额限制


性能建议

  1. I/O 密集型任务
    建议使用 2 * availableParallelism() 个线程

  2. CPU 密集型任务
    直接使用 availableParallelism() 作为线程池大小

  3. 混合型任务
    动态调整:Math.max(availableParallelism(), 4)


通过合理使用此 API,可以实现以下优化:

  • 避免在资源受限环境中创建过多线程
  • 提升容器化部署的资源利用率
  • 增强跨平台部署的一致性

建议配合 process.resourceUsage() 监控实际资源消耗。

http://www.dtcms.com/a/276729.html

相关文章:

  • 前端弹性布局全解析
  • 20250712-2-Kubernetes 应用程序生命周期管理-部署应用的流程_笔记
  • PyVision:基于动态工具的具身智能体
  • 剑指offer——队列栈:用两个栈实现队列
  • 模型驱动的架构MDA的案例
  • 如何配置pip使用国内镜像?
  • 2D转换综合写法顺序,以及注意事项
  • 【理念●体系】模板规范篇:打造可标准化复用的 AI 项目骨架
  • 68 指针的减法操作
  • C语言文件读操作详解:使用fgets函数实现安全的按行读取
  • 在YOLO-World中集成DeformConv、CBAM和Cross-Modal Attention模块的技术报告
  • 进制转换算法详解及应用
  • 红旗新能源车:驾驭梦想,驶向未来
  • TDengine 使用最佳实践(1)
  • 系统性能评估方法深度解析:从经典到现代
  • 【C/C++】编译期计算能力概述
  • 《汇编语言:基于X86处理器》第7章 整数运算(3)
  • Noting
  • L1正则化 VS L2正则化
  • 全连接网络 和卷积神经网络
  • 《Java Web程序设计》实验报告一 Java Web环境配置
  • Cypress与多语言后端集成指南
  • C++——类和对象的相关知识点
  • 复习笔记 31
  • RHCSA(2)
  • STM32--USART串口通信的应用(第一节串口通信的概念)
  • docker网络与数据持久化
  • SolidWorks并发不足频出,浮动许可还能怎么优化?
  • Python 中 enumerate(s) 和 range() 的对比
  • 博途多重背景、参数实例--(二)