Sobes.tech
Middle+

Чӣ гуна бисёрсоҳавӣ дар Node.js амалӣ мешавад?

sobes.tech AI

Ҷавоб аз AI

Node.js дарсонияти табиӣ якпорчагӣ барои иҷрои код JavaScript-и истифодабаранда. Мулоҳизаҳои бисёрҷониба тавассути Input/Output-и беасос ва Event Loop ба даст меоянд. Модулҳои worker_threads барои иҷрои вазифаҳои вазнин бо бисёрҷониба истифода мешаванд.

Event Loop:

  • Механизми асосӣ барои амалиётҳои асинхронӣ.
  • Даврии якпорчагӣ, ки callback-ҳоро, ки бо I/O, таймерҳо ва дигар ҳодисаҳои асинхронӣ алоқаманданд, коркард мекунад.

Worker Threads:

  • Имкон медиҳанд, ки вазифаҳои вазнин CPU-bound дар параллел иҷро шаванд.
  • Ҳар як коргар дар як ҷараёни алоҳидаи V8 JavaScript-ро оғоз мекунад.
  • Муносибати байни ҷараёни асосӣ ва коргарон тавассути иваз кардани паёмҳо (postMessage, receiveMessage) сурат мегирад.

Муҳокима:

Механизм Нақшаи корӣ Параллелизм Идоракунии ҳолатҳо Истифодаи хотира Сохторӣ Беҳтар барои
Event Loop I/O асинхронӣ Маҳдудият дар ҳамзамонӣ Ҳолати умумӣ Самаранокӣ Низо вазифаҳои I/O-баро
Worker Threads ҳисобҳои CPU-bound Параллелизм Идоракунии мустақил Бештар вазифаҳои CPU-bound

Маслиҳат барои истифодаи worker_threads:

// main.js
const { Worker, isMainThread, parentPort } = require('worker_threads');

if (isMainThread) {
  // Ин ҷараёни асосӣ аст
  const worker = new Worker(__filename); // Созда кардани коргар бо истифода аз ҳамин файл

  worker.on('message', (msg) => {
    console.log(`Паёме аз коргар: ${msg}`);
  });

  worker.on('error', (err) => {
    console.error(err);
  });

  worker.on('exit', (code) => {
    if (code !== 0)
      console.error(`Коргар бо коди ${code} ба охир расид`);
  });

  worker.postMessage('Салом, коргар!'); // Паёмро ба коргар мефиристад

} else {
  // Ин ҷараёни коргар
  parentPort.on('message', (msg) => {
    console.log(`Паёме аз ҷараёни асосӣ: ${msg}`);
    parentPort.postMessage('Салом, ҷараёни асосӣ!'); // Паёмро бармегардонад
  });
}

Event Loop дар сатҳи Node.js ва libuv идора карда мешавад, дар ҳоле ки worker_threads API-ро барои эҷод ва идора кардани ҷараёнҳо барои иҷрои код JavaScript пешниҳод мекунад.