获取JavaScript中的CPU核心数量?

tsa*_*ein 54 javascript cpu-cores web-worker

有没有办法确定JavaScript中可用的CPU核心数量,以便您可以根据具体情况调整Web工作者的数量?

Eli*_*rey 71

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

  • 它是某种标准的一部分(如支持或意味着在其他浏览器中也支持)? (2认同)
  • 从今天起,它适用于Chrome和Firefox - https://jsfiddle.net/bf1r2q7q/ (2认同)

Dar*_*rov 19

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

  • 最后有一个API,请参阅现在接受的答案. (6认同)

dlo*_*ley 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'}));
Run Code Online (Sandbox Code Playgroud)

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

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