Sobes.tech
Middle — Middle+

როგორ შეიძლება ოპტიმიზირდეს რესურსისადმი მოთხოვნადი მათემატიკური ოპერაციის შესრულება ერთთრიპიან ასინქრონულ გარემოში ისე, რომ ის არ დაბლოკოს მთავარი მოვლენის ციკლი?

sobes.tech AI

პასუხი AI-სგან

ერთობლივი, ასინქრონული გარემოს, მაგალითად Node.js-ის, რესურსის მძიმე გამოთვლები ბლოკავს მთავარი მოვლენის ციკლს, რაც იწვევს სხვა მოთხოვნების დამუშავების დაგვიანებას. ამის თავიდან ასაცილებლად:

  • გამოთვლები გადაიტანეთ ცალკე ძაფზე ან პროცესზე, გამოიყენეთ Worker Threads ან child_process.
  • გამოიყენეთ ასინქრონული დავალებების რიგები, რომლებიც განაწილებენ დატვირთვას.

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(`მუშაკი შეჩერდა კოდით ${code}`));
    });
  });
}

// მთავარი ფაილში
runHeavyComputation(inputData).then(result => {
  console.log('შედეგი:', result);
});

ამ გზით, მთავარი მოვლენის ციკლი თავისუფალია სხვა დავალებების დამუშავებისთვის.