72 votes

Obtenir le nombre de cœurs de processeur en JavaScript?

Existe-t-il un moyen de déterminer le nombre de cœurs de processeur disponibles en JavaScript afin de pouvoir ajuster le nombre de travailleurs Web en fonction de cela?

96voto

Eli Grey Points 17553

Oui, navigator.hardwareConcurrency . Prise en charge native dans Chrome 37, Opera 24 et (bientôt) Webkit; pris en charge dans tous les navigateurs avec le polyfill.

18voto

Darin Dimitrov Points 528142

Non, il n'y en a pas, sauf si vous utilisez un ActiveX.

14voto

rashtao Points 179

Vous pouvez essayer d’estimer le nombre de cœurs avec: https://github.com/oftn/core-estimator

démo: http://eligrey.com/blog/post/cpu-core-estimation-with-javascript

12voto

dlongley Points 811

Voici un pas assez rapide simultanéité estimateur j'ai bidouillé... il n'a pas fait l'objet de tester encore:

http://jsfiddle.net/Ma4YT/2/

Voici le code, les travailleurs de course (depuis que j'ai un jsfiddle lien d'un échantillon est nécessaire):


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

L'estimateur a un grand nombre de travailleurs exécuter pour une courte période de temps (4ms) et de présenter un rapport au temps qu'ils ont couru (malheureusement, la performance.maintenant() n'est pas disponible dans les Web workers pour plus d'un timing précis). Le thread principal puis vérifie le nombre maximum de travailleurs qui étaient en cours d'exécution dans le même temps. Ce test est répété un nombre de fois pour obtenir un décent de l'échantillon afin de produire une estimation avec.

Donc, l'idée principale est que, étant donné un assez petit morceau de travail, les travailleurs devraient seulement être programmé pour s'exécuter en même temps si il y a assez de carottes à l'appui de ce comportement. Il est bien sûr juste une estimation, mais il a jusqu'à présent été assez exacte pour quelques machines que j'ai testé -- qui est assez bon pour mon cas d'utilisation. Le nombre d'échantillons peut être augmentée afin d'obtenir une mesure plus précise de l'approximation; je viens de l'utiliser 10 parce que c'est rapide et je ne veux pas perdre de temps à l'estimation plutôt qu'à l'exécution des travaux.

-1voto

Piskvor Points 46986

Non. JavaScript est très éloigné de ces détails matériels et ne dispose d'aucun mécanisme légitime pour les interroger.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X