Múltiples bucles incrustados en NodeJS

Me gusta ejecutar el siguiente código … pero como puede ver, ¡requerirá 10 mil millones de bucles! Así que me preguntaba: ¿qué sugerirían ustedes para hacerlo girar más rápido?

La razón por la que, para obtener el mejor resultado, me gusta la “fuerza bruta”, es porque el método más interno realiza un cálculo complejo de algunos datos históricos, aproximadamente 7 millones de filas de un DB … y el punto al hacer todo esto – es encontrar el mejor “ajuste” de los parámetros dados af … lo que da el mejor resultado …

var a = 0.1; while(a <= 10) // 100 { var b = 0.1; while(b <= 10) // 100 { var c = 0.1; while(c <= 10) // 100 { var d = 0.1; while(d <= 10) // 100 { var e = 1; while(e <= 10) // 10 { var f = 1; while(f <= 10) // 10 10.000.000.000 { // Call at method which use all parameters and return the result of a given calculation //doSomeThing(a,b,c,d,e,f); f += 1; } e += 1; } d += 0.1; } c += 0.1; } b += 0.1; } a += 0.1; } 

Divida los bucles en trozos más pequeños y procesos de horquilla utilizando el módulo de clúster central, procesando cada trozo más pequeño en una horquilla. Las horquillas se ejecutarán en hilos separados, mejor aprovechando la CPU.

https://nodejs.org/api/cluster.html#cluster_how_it_works

ACTUALIZAR. De acuerdo, no uses Cluster. Utilice el módulo de hilos en su lugar – será mucho más fácil. https://www.npmjs.com/package/threads

 var cores = require('os').cpus().length; var Pool = require('threads').Pool; var pool = new Pool(cores); var doSomeThing = pool.run(function(data,done){ var result = data.a * data.b * data.c * data.d * data.e * data.f; done(result,data); }) var a = 0.1; var b = 0.1; var c = 0.1; var d = 0.1; var e = 0.1; var f = 0.1; while(a <= 10) // 100 loops { while(b <= 10) // 100 loops { while(c <= 10) // 100 loops { while(d <= 10) // 100 loops { while(e <= 10) // 10 loops { while(f <= 10) // 10 loops { // Call at method which use all parameters and return the result of a given calculation doSomeThing.send({a:a,b:b,c:c,d:d,e:e,f:f}); f += 0.1; } e += 0.1; } d += 0.1; } c += 0.1; } b += 1; } a += 1; } pool .on('error', function(job, error) { console.error('Job errored:', job); }) .on('finished', function() { console.log('Everything done, shutting down the thread pool.'); pool.killAll(); });