获取JavaScript中的CPU核心数量?

时间:2010-07-20 11:35:20

标签: javascript web-worker cpu-cores

有没有办法确定JavaScript中可用的CPU内核数量,以便您可以根据需要调整Web工作者的数量?

5 个答案:

答案 0 :(得分:69)

是的,navigator.hardwareConcurrency。 Chrome,Firefox,Edge,Opera和Webkit本身支持;所有浏览器都支持a polyfill

答案 1 :(得分:19)

不,除非你使用一些ActiveX,否则没有。

答案 2 :(得分:14)

您可以尝试使用以下方法估算核心数量: https://github.com/oftn/core-estimator

演示: http://eligrey.com/blog/post/cpu-core-estimation-with-javascript

答案 3 :(得分:11)

这是一个相当快速的并发估算器,我一起入侵了......它还没有经过太多测试:

http://jsfiddle.net/Ma4YT/2/

这是工作人员运行的代码(因为我有一个jsfiddle链接需要一个样本):


// create worker concurrency estimation code as blob
var blobUrl = URL.createObjectURL(new Blob(['(',
  function() {
    self.addEventListener('message', function(e) {
      // run worker for 4 ms
      var st = Date.now();
      var et = st + 4;
      while(Date.now() < et);
      self.postMessage({st: st, et: et});
    });
  }.toString(),
')()'], {type: 'application/javascript'}));

估算工具有大量工作人员在短时间内运行(4毫秒)并报告他们运行的时间(不幸的是,在Web Workers中,performance.now()不可用于更精确的计时)。然后主线程检查以查看同时运行的最大工作数。这个测试重复多次,以获得一个合适的样本来产生估计值。

所以主要的想法是,如果有足够的核心来支持这种行为,只要有足够多的工作,工作人员应该只安排在同一时间运行。这显然只是一个估计值,但到目前为止,对于我测试过的几台机器来说,它已经相当准确 - 这对我的用例来说已经足够了。可以增加样本数量以获得更准确的近似值;我只是使用10,因为它很快,我不想浪费时间估算而不是完成工作。

答案 4 :(得分:0)

如果您要对工作人员进行数据处理,navigator.hardwareConcurrency可能不够好,因为它返回了现代浏览器中逻辑核心的数量,您可以尝试使用{{ 3}}:

import {WebCPU} from 'webcpu';

WebCPU.detectCPU().then(result => {
    console.log(`Reported Cores: ${result.reportedCores}`);
    console.log(`Estimated Idle Cores: ${result.estimatedIdleCores}`);
    console.log(`Estimated Physical Cores: ${result.estimatedPhysicalCores}`);
});
相关问题