Skip to content

如何在 JavaScript 中获取 CPU 内核数量

Posted on:2024年6月6日 at 07:54

在Web开发中,有时我们需要根据用户机器的CPU内核数量来调整Web Worker的数量,以充分利用CPU的并行能力。JavaScript本身并没有直接提供获取CPU内核数量的API,但是现代浏览器提供了一个名为navigator.hardwareConcurrency的属性,可以用来获取CPU的逻辑处理器核心数。

navigator.hardwareConcurrency是一个只读属性,返回值是用户计算机上可用于运行线程的逻辑处理器内核数量。需要注意的是:

  1. 这个数值不一定等于真实的物理CPU内核数,因为现代CPU通过超线程技术,能让一个物理内核模拟出多个逻辑内核。

  2. 为了更好地控制Web Worker的数量,浏览器可能会返回一个低于真实值的数字。

  3. 该属性在Internet Explorer和Edge旧版本中不可用,但可以使用polyfill core-estimator来填补。

下面是一个示例代码:

let numCores = navigator.hardwareConcurrency || 4; // 默认假设4个逻辑内核
console.log(`可用的逻辑CPU内核数: ${numCores}`);

// 根据CPU内核数创建Web Worker
for (let i = 0; i < numCores; i++) {
  let worker = new Worker("worker.js");
  // ...
}

在上面的代码中,如果navigator.hardwareConcurrency不可用,就默认假设有4个逻辑CPU内核。然后根据内核数创建相应数量的Web Worker。

navigator.hardwareConcurrency提供了一种在JavaScript中获取CPU内核数量的方式,尽管不是100%准确,但能给我们很好的提示,帮助合理分配Web Worker的数量,更好地利用多核CPU的并行能力。