2010-07-20 5 views
48

자바 스크립트에서 사용 가능한 CPU 코어 수를 결정할 수있는 방법이 있습니까? 그렇다면 그것에 따라 웹 작업자 수를 조정할 수 있습니까?자바 스크립트에서 CPU 코어 수를 확인 하시겠습니까?

+6

@meo : "이 컴퓨터에는 CPU 코어가 있습니다." 평균 사용자는 JS보다 코어에 대해 훨씬 덜 알고 있습니다.) – Piskvor

+0

하하하 좋은 점 – meo

+2

웹 페이지를 쓰는 모든 사람이 내 컴퓨터의 전체 리소스를 제어 할 수 있다고 가정하는 이유는 무엇입니까? 나는 당신의 웹 페이지에서 필요한 정보를 읽는 동안 다른 일을 성취하고 싶습니다. –

답변

56

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

+1

Chrome에서 실행하면 정의되지 않습니다. – jmort253

+0

http://src.chromium.org/에 따라 현재 Chrome Canary 빌드에서 사용할 수 있습니다. viewavc/blink? view = revision & revision = 175629 Chrome Canary에서 작동했음을 확인했습니다. 37. –

+2

다른 브라우저에서도 지원되거나 지원되는 것과 같은 종류의 표준인가요? – jayarjo

20

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

+0

짧고 요점. +1;) – falstro

+0

좋아, 그게 내가 기대했던거야. 아직도 고마워! – tsauerwein

+0

WHATWG 메일 링리스트에는 사양의 버전 2에서 비슷한 속성을 제공하는 것에 대한 토론이 있습니다. http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2009-November/024058.html http : //lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-November/023993.html – tsauerwein

-2

아니요. 자바 스크립트는 이러한 하드웨어 세부 정보와 너무 멀리 떨어져 있으며 쿼리 할 수있는 합법적 인 메커니즘이 없습니다.

10

내가 함께 해킹 상당히 빠른 동시성 추정이야는 ... 아직 많은 테스트를 시행하지 않은 :

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을 사용한다. 나는 일을 끝내는 것보다 시간을 낭비하고 싶지 않다.

+0

해당 피들에 +1 – random6174

+0

은 # 2 답변, 속도 및 정확성이 우수해야합니다. – ViliusL

관련 문제