Get number of CPU cores in JavaScript?

前端 未结 5 1562
执笔经年
执笔经年 2020-12-05 09:00

Is there a way to determine the number of available CPU cores in JavaScript, so that you could adjust the number of web workers depending on that?

5条回答
  •  甜味超标
    2020-12-05 09:35

    Here's a fairly quick concurrency estimator I hacked together... it hasn't undergone much testing yet:

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

    Here's the code the workers run (since I have a jsfiddle link a sample is necessary):

    
    // 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'}));
    

    The estimator has a large number of workers run for a short period of time (4ms) and report back the times that they ran (unfortunately, performance.now() is unavailable in Web Workers for more accurate timing). The main thread then checks to see the maximum number of workers that were running during the same time. This test is repeated a number of times to get a decent sample to produce an estimate with.

    So the main idea is that, given a small enough chunk of work, workers should only be scheduled to run at the same time if there are enough cores to support that behavior. It's obviously just an estimate, but so far it's been reasonably accurate for a few machines I've tested -- which is good enough for my use case. The number of samples can be increased to get a more accurate approximation; I just use 10 because it's quick and I don't want to waste time estimating versus just getting the work done.

提交回复
热议问题