Spúšťajte náročnú prácu vo vlákne alebo v podriadenom procese
Node.js spúšťa váš kód v jednom vlákne, takže dlhý výpočet blokuje všetky požiadavky. NEWTHREAD(name, data) spustí workers/<name>.js vo worker vlákne a vráti štandardný Worker z Node.js: posielajte mu správy cez worker.postMessage(value), odpovede prijímajte cez worker.on('message', fn) a zastavte ho cez worker.kill(). Druhý argument (data) sa workeru odovzdá ako počiatočné dáta. NEWFORK(name) má rovnaký tvar, ale spustí samostatný podriadený proces, ktorý je od hlavného procesu izolovaný (jeho pád vašu aplikáciu neovplyvní).
Vnútri súboru workera NEWTHREAD() bez argumentov vráti handle workera: worker.data obsahuje počiatočné dáta, worker.message = fn prijíma správy a worker.postMessage(value) odpovedá. Názov s prefixom ~ použite na súbor podľa cesty namiesto 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 });
}