Tengo una clase con una función que resultó ser bastante intensiva en CPU y estoy tratando de determinar la mejor manera de separar esto en otro subproceso. Usé el siguiente código para probar esto, pero no estoy seguro de si esta es la mejor manera de lograrlo. En última instancia, me gustaría tener una clase con una función pesada de CPU y poder elegir ejecutarla en un subproceso separado.
Mi código de trabajo:
var cluster = require('cluster') if (!cluster.isMaster) { // cpuHog is only called inside the child process console.log(`Worker is listening on pid:${process.pid}`); process.on('message', (input) => { console.log(`Request receved for input ${input}`) cpuHog(input).then(output => process.send(output)) }) return; // exit if child } function cpuHog(input){ return new Promise( (resolve)=> { setTimeout(()=> {resolve(input*input)},2000) }) } function createSeparateThread(input){ return new Promise((resolve,reject) => { var worker = cluster.fork() worker.on('message', resolve); worker.send(input) }) } var input = 5 createSeparateThread(input).then( output => console.log(`Received result is ${output}`)) // My normal async node js code...
Entonces, si el código anterior está bien, ¿cómo lo traduzco a una instancia de clase?
var myClass = new MyClass() // this should start a new thread myClass.createSeparateThread(5)