Middle — Middle+
Kaip optimizuoti resursų intensyvią matematinę operaciją vieno siūlo asinchroniniame aplinkoje, kad ji neužblokuotų pagrindinio įvykių ciklo?
sobes.tech AI
Atsakymas iš AI
Vienguboje asinchroninėje aplinkoje, pavyzdžiui, Node.js, ištekliais intensyvūs skaičiavimai blokuoja pagrindinį įvykių ciklą, dėl ko vėluoja kitų užklausų apdorojimas. Norint to išvengti:
- Perkelkite skaičiavimus į atskirą giją arba procesą, naudodami Worker Threads arba child_process.
- Naudokite asinchronines užduočių eilutes, kurios paskirsto apkrovą.
Pavyzdys su Worker Threads:
const { Worker } = require('worker_threads');
function runHeavyComputation(data) {
return new Promise((resolve, reject) => {
const worker = new Worker('./heavyComputation.js', { workerData: data });
worker.on('message', resolve);
worker.on('error', reject);
worker.on('exit', (code) => {
if (code !== 0) reject(new Error(`Darbininkas sustojo su išėjimo kodu ${code}`));
});
});
}
// Pagrindiniame faile
runHeavyComputation(inputData).then(result => {
console.log('Rezultatas:', result);
});
Taip pagrindinis įvykių ciklas lieka laisvas kitų užduočių apdorojimui.