Подтвердить что ты не робот

Получите количество ядер процессора в JavaScript?

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

4b9b3361

Ответ 1

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

Ответ 2

Нет, нет, если вы не используете какой-либо ActiveX.

Ответ 4

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

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 мс) и отчитывается о времени, в котором они выполнялись (к сожалению, в Web Workers недоступен функция performance.now() для более точного определения времени). Затем основной поток проверяет, чтобы максимальное количество рабочих, которые работали в одно и то же время. Этот тест повторяется несколько раз, чтобы получить достойный образец для получения оценки с помощью.

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

Ответ 5

Если вы собираетесь обрабатывать данные ваших работников, 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}');
});

Ответ 6

Нет. JavaScript очень далек от таких деталей оборудования и не имеет законного механизма для их запроса.