Ejecuta trabajo pesado en un hilo o en un proceso hijo
Node.js ejecuta tu código en un solo hilo, así que un cálculo largo bloquea todas las peticiones. NEWTHREAD(name, data) arranca workers/<name>.js en un hilo worker y devuelve un Worker estándar de Node.js: envíale mensajes con worker.postMessage(value), recibe las respuestas con worker.on('message', fn) y detenlo con worker.kill(). El segundo argumento (data) se entrega al worker como datos iniciales. NEWFORK(name) tiene la misma forma pero arranca un proceso hijo independiente, aislado del proceso principal (si falla, tu aplicación no se ve afectada).
Dentro del archivo del worker, NEWTHREAD() sin argumentos devuelve el manejador del worker: worker.data contiene los datos iniciales, worker.message = fn recibe los mensajes y worker.postMessage(value) responde. Pasa un nombre con el prefijo ~ para usar un archivo por su ruta en lugar de workers/<name>.js.
require('total5');
const worker = NEWTHREAD();
const start = worker.data.start;
worker.message = function(message) {
let total = start;
for (let i = 1; i <= message.to; i++)
total += i;
worker.postMessage({ total: total });
};exports.install = function() {
ROUTE('GET /sum/{to}/', sum);
};
var thread = NEWTHREAD('sum', { start: 1000 });
function sum($) {
var to = +$.params.to;
var timeout = setTimeout(() => $.invalid('timeout'), 4000);
thread.once('message', function(response) {
clearTimeout(timeout);
$.json(response);
});
thread.postMessage({ to: to });
}