tecnologias - Obtener el número de núcleos de CPU en JavaScript?
tecnologias de javascript (5)
¿Hay alguna manera de determinar la cantidad de núcleos de CPU disponibles en JavaScript, para que pueda ajustar el número de trabajadores de la web según eso?
Aquí hay un estimador de concurrencia bastante rápido que he pirateado juntos ... aún no ha sido sometido a muchas pruebas:
Aquí está el código que los trabajadores ejecutan (dado que tengo un enlace jsfiddle, es necesaria una muestra):
// 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 una gran cantidad de trabajadores que se ejecutan durante un corto período de tiempo (4 ms) e informan sobre los tiempos que corrieron (lamentablemente, performance.now () no está disponible en Web Workers para obtener un calendario más preciso). El hilo principal luego verifica 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 generar un estimado.
Entonces, la idea principal es que, dado un trabajo lo suficientemente pequeño, los trabajadores solo deberían programarse para ejecutarse al mismo tiempo si hay suficientes núcleos para respaldar ese comportamiento. Obviamente es solo una estimación, pero hasta ahora ha sido razonablemente preciso para algunas máquinas que he probado, lo cual es suficiente 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 el tiempo estimando en lugar de solo hacer el trabajo.
No, no, a menos que use algún ActiveX.
No. JavaScript está muy lejos de tales detalles de hardware y no tiene un mecanismo legítimo para consultarlos.
Puede intentar estimar el número de núcleos con: https://github.com/oftn/core-estimator
demo: http://eligrey.com/blog/post/cpu-core-estimation-with-javascript
Sí, navigator.hardwareConcurrency . Admitido de forma nativa en Chrome, Firefox, Edge, Opera y Webkit; soportado en todos los navegadores con un polyfill .