ForgeTotal.js 5
bg

Total.js 5

Изпълнявайте тежка работа в нишка или дъщерен процес

Total.js 5 · total5@0.0.19 workerthreadperformance Изпълнено с Total.js 5

Node.js изпълнява вашия код в една нишка, така че дълго изчисление блокира всяка заявка. NEWTHREAD(name, data) стартира workers/<name>.js в нишка worker и връща стандартен Worker на Node.js: изпращайте му съобщения с worker.postMessage(value), получавайте отговори с worker.on('message', fn) и го спрете с worker.kill(). Вторият аргумент (data) се предава на worker като начални данни. NEWFORK(name) има същата форма, но стартира отделен дъщерен процес, изолиран от главния (срив в него не засяга вашето приложение).

Във файла на worker NEWTHREAD() без аргументи връща манипулатора на worker: worker.data съдържа началните данни, worker.message = fn получава съобщения, а worker.postMessage(value) отговаря. Подайте име с префикс ~, за да използвате файл по неговия път вместо workers/<name>.js.

workers/sum.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 });
};
controllers/sum.js
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 });
}