Obtener el número de núcleos de CPU en JavaScript?


¿Hay alguna manera de determinar el número de núcleos de CPU disponibles en JavaScript, para que pueda ajustar el número de trabajadores web en función de eso?

Author: tsauerwein, 2010-07-20

5 answers

Sí, navegador.hardwareConcurrency . Soportado de forma nativa en Chrome, Firefox, Edge, Opera y Webkit; soportado en todos los navegadores con un polyfill.

 61
Author: Eli Grey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-02 06:15:04

No, no lo hay, a menos que use algún ActiveX.

 20
Author: Darin Dimitrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-20 11:37:01
 14
Author: rashtao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-07 09:45:30

Aquí hay un estimador de concurrencia bastante rápido que hackeé juntos... no se ha sometido a muchas pruebas todavía:

Http://jsfiddle.net/Ma4YT/2 /

Aquí está el código que ejecutan los trabajadores (ya que tengo un enlace jsfiddle es necesario un ejemplo):


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

El estimador tiene un gran número de trabajadores corriendo por un corto período de tiempo (4ms) e informan los tiempos que corrieron (desafortunadamente, el rendimiento.now() no está disponible en Web Workers para una sincronización más precisa). Principal thread luego comprueba para ver el número máximo de trabajadores que se estaban ejecutando durante el mismo tiempo. Esta prueba se repite varias veces para obtener una muestra decente para producir una estimación con.

Así que la idea principal es que, dado un trozo de trabajo lo suficientemente pequeño, los workers solo deben programarse para ejecutarse al mismo tiempo si hay suficientes núcleos para soportar ese comportamiento. Obviamente es solo una estimación, pero hasta ahora ha sido razonablemente precisa para algunas máquinas que he probado which lo cual es suficientemente bueno para mi caso de uso. El número de muestras se puede aumentar para obtener una aproximación más precisa; solo uso 10 porque es rápido y no quiero perder tiempo estimando versus solo haciendo el trabajo.

 11
Author: dlongley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-17 00:30:49

No. JavaScript está muy lejos de tales detalles de hardware, y no tiene ningún mecanismo legítimo para consultarlos.

 -2
Author: Piskvor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-20 11:37:36