문제

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

도움이 되었습니까?

해결책

예. mdn :

을 인용하려면

navigator.hardwareConcurrency 읽기 전용 속성을 반환합니다. 사용자 컴퓨터에서 스레드를 실행할 수있는 논리 프로세서 수 ...

현대적인 컴퓨터는 CPU (2 ~ 4 개의 코어가 일반적으로)에 여러 개의 물리적 프로세서 코어가 있지만, 각 물리적 코어는 일반적으로 고급 스케줄링 기술을 사용하여 한 번에 하나 이상의 스레드를 실행할 수 있습니다. 따라서 4 코어 CPU는 예를 들어 8 논리적 프로세서 코어 을 제공 할 수 있습니다. 논리 프로세서 코어의 수는 컨텍스트 스위치가 없으면 즉시 효과적으로 실행할 수있는 스레드 수를 측정하는 데 사용할 수 있습니다.

그러나 브라우저는 한 번에 실행할 수있는 근로자 수를보다 정확하게 나타 내기 위해 더 낮은 수의 논리 코어를보고하도록 선택하므로 코어의 수의 절대 측정으로이를 처리하지 마십시오. 사용자 시스템.

Internet Explorer를 제외한 모든 브라우저가 있습니다. polyfill core-estimator ( 데모 , 블로그 게시물 ).

다른 팁

아니오, ActiveX를 사용하지 않는 한 그렇지 않습니다.

다음과 같은 코어 수를 추정하려고 할 수 있습니다. https://github.com/oftn/core-estimator

데모 : http://eligrey.com/blog/post/cpu-core-estimation.-With-JavaScript

여기에 상당히 빠른 동시성 추정치가 있습니다 ... 아직 많은 테스트를받지 못했습니다 :

http://jsfiddle.net/ma4yt/2/2/A>

근로자가 실행하는 코드가 있습니다 (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) 동안 많은 수의 근로자가 실행되며, 그들이 실행하는 시간을 되돌릴 시간을 되돌릴 수 있습니다 (불행히도, 더 정확한 타이밍을 위해 웹 작업자가 사용할 수 없음). 그런 다음 주 스레드는 동시에 실행중인 최대 작업자 수를 확인합니다. 이 테스트는 예상치를 생성하기 위해 괜찮은 샘플을 얻기 위해 여러 번 반복됩니다.

주요 아이디어는 충분한 작품을 감안할 때, 그 행동을 지원하기에 충분한 코어가있는 경우 근로자는 동시에 동시에 실행되도록 예정되어야한다는 것입니다. 분명히 단지 견적이지만, 지금까지 테스트 한 몇 개의 기계에 대해 합리적으로 정확 해졌습니다. 이는 내 유스 케이스에 충분히 좋습니다. 샘플 수를 증가시켜보다 정확한 근사치를 얻을 수 있습니다. 나는 단지 10을 낭비하기 때문에 10 번을 사용하고, 시간을 낭비하는 데 시간을 낭비하고 싶지 않습니다.

작업자에 대한 데이터 처리를 수행하려는 경우 navigator.hardwareConcurrency 최신 브라우저의 논리적 코어 수를 반환하므로 충분하지 않을 수 있습니다. 다음을 사용하여 물리적 코어 수를 추정해 볼 수 있습니다. 웹CPU:

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}`);
});
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top