developer tip

JavaScript에서 CPU 코어 수를 얻습니까?

optionbox 2021. 1. 11. 08:02
반응형

JavaScript에서 CPU 코어 수를 얻습니까?


JavaScript에서 사용 가능한 CPU 코어 수를 결정하는 방법이 있습니까? 이에 따라 웹 작업자 수를 조정할 수 있습니까?


예, navigator.hardwareConcurrency 입니다. Chrome, Firefox, Edge, Opera 및 Webkit에서 기본적으로 지원됩니다. polyfill이 있는 모든 브라우저에서 지원됩니다 .


아니요, ActiveX를 사용하지 않는 한 없습니다.


https://github.com/oftn/core-estimator 를 사용하여 코어 수를 추정 할 수 있습니다.

데모 : http://eligrey.com/blog/post/cpu-core-estimation-with-javascript


여기 제가 함께 해킹 한 상당히 빠른 동시성 추정기가 있습니다 ... 아직 많은 테스트를 거치지 않았습니다.

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

추정기는 단기간 (4ms) 동안 많은 수의 작업자가 실행되고 실행 된 시간을보고합니다 (불행히도 더 정확한 타이밍을 위해 웹 작업자에서 performance.now ()를 사용할 수 없음). 그런 다음 주 스레드는 동시에 실행중인 작업자의 최대 수를 확인합니다. 이 테스트를 여러 번 반복하여 추정치를 생성 할 적절한 샘플을 얻습니다.

따라서 주된 아이디어는 충분히 작은 작업 청크가 주어지면 해당 동작을 지원할 수있는 충분한 코어가있는 경우에만 작업자가 동시에 실행되도록 예약해야한다는 것입니다. 분명히 추정치 일 뿐이지 만 지금까지 테스트 한 몇 대의 머신에 대해 상당히 정확했습니다. 이는 제 사용 사례에 충분합니다. 보다 정확한 근사치를 얻기 위해 샘플 수를 늘릴 수 있습니다. 저는 10 개를 사용합니다. 빠르기 때문에 계산하는 데 시간을 낭비하는 대신 작업을 완료하는 데 시간을 낭비하고 싶지 않습니다.


작업자에서 데이터 크 런칭을 수행하려는 경우 navigator.hardwareConcurrency최신 브라우저에서 논리 코어 수를 반환하므로 충분하지 않을 수 있습니다 . WebCPU를 사용하여 물리적 코어 수를 추정 할 수 있습니다 .

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}`);
});

참조 URL : https://stackoverflow.com/questions/3289465/get-number-of-cpu-cores-in-javascript

반응형