Получить количество ядер процессора в JavaScript? - PullRequest
54 голосов
/ 20 июля 2010

Есть ли способ определить количество доступных ядер ЦП в JavaScript, чтобы вы могли настроить количество веб-работников в зависимости от этого?

Ответы [ 5 ]

69 голосов
/ 17 мая 2014

Да, navigator.hardwareConcurrency . Изначально поддерживается в Chrome, Firefox, Edge, Opera и Webkit; поддерживается во всех браузерах с полифилом .

19 голосов
/ 20 июля 2010

Нет, нет, если вы не используете ActiveX.

14 голосов
/ 07 июня 2013

Вы можете попытаться оценить количество ядер с помощью: https://github.com/oftn/core-estimator

демо: http://eligrey.com/blog/post/cpu-core-estimation-with-javascript

11 голосов
/ 17 февраля 2014

Вот довольно быстрая оценка параллелизма, которую я взломал вместе ... она еще не прошла много испытаний:

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

Оценщик имеет большое количество рабочих, выполняемых в течение короткого периода времени (4 мс), и отчитывается о времени, которое они выполняли (к сожалению, performance.now () недоступен в Web Workers для более точной синхронизации). Затем основной поток проверяет максимальное количество рабочих, которые работали за одно и то же время. Этот тест повторяется несколько раз, чтобы получить достойную выборку для оценки с.

Таким образом, основная идея заключается в том, что, учитывая достаточно небольшой объем работы, рабочие должны планироваться для одновременного запуска только при наличии достаточного количества ядер для поддержки такого поведения. Это, очевидно, просто оценка, но до сих пор она была достаточно точной для нескольких машин, которые я тестировал, что вполне достаточно для моего варианта использования. Количество образцов может быть увеличено, чтобы получить более точное приближение; Я просто использую 10, потому что это быстро, и я не хочу тратить время на оценку, а просто на выполнение работы.

0 голосов
/ 12 апреля 2019

Если вы собираетесь перебирать данные о своих сотрудниках, 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}`);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...