Sobes.tech
Middle

Jak je v Node.js implementováno jednovláknové zpracování?

sobes.tech AI

Odpověď od AI

Node.js je jednovláknové prostředí pro spouštění JavaScriptového kódu díky mechanismu Event Loop. Neustále kontroluje frontu událostí a spouští odpovídající callbacky.

Pro provádění blokujících operací (vstup/výstup, práce se soubory, síť) Node.js využívá Thread Pool (pools vláken) z knihovny libuv. Tyto operace jsou prováděny asynchronně v samostatných vláknech, aniž by blokovaly hlavní vlákno Event Loopu. Výsledky nebo chyby jsou vraceny zpět do Event Loopu přes callbacky.

Klíčové komponenty:

  • Event Loop: Hlavní cyklus vykonávání, který zpracovává události a volání funkcí.
  • Fronta callbacků: Fronta pro callbacky dokončených asynchronních operací.
  • Pool vláken: Samostatná vlákna pro provádění blokujících úloh.
  • libuv: Nízké úrovně knihovna poskytující Event Loop a Thread Pool.
// Příklad asynchronní operace se souborem
const fs = require('fs');

fs.readFile('file.txt', 'utf8', (err, data) => {
  // Tento callback bude spuštěn po dokončení čtení souboru
  // v samostatném vlákně z Thread Poolu
  if (err) {
    console.error(err);
    return;
  }
  console.log(data);
});

console.log('Tato zpráva se zobrazí jako první, protože čtení souboru je asynchronní');

Tímto způsobem Node.js zajišťuje vysoký výkon pro konkurenční úlohy díky neblokujícímu vstupu/výstupu, i přes to, že JavaScript běží na jednom vlákně.