JavaScript에서 CPU 코어 수를 얻으시겠습니까?
-
17-09-2020 - |
문제
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'}));
.
작업자에 대한 데이터 처리를 수행하려는 경우 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}`);
});