Jinsi Node.js Inavyoshughulikia Maombi Maelfu

Watu husema Node.js ina thread moja tu (single-threaded).

Hata hivyo, inashughulikia maombi maelfu, inasoma faili, na kufanya wito wa API bila kusimama.

Inafanyaje kazi?

Jibu ni libuv.

libuv ni maktaba ya C. Inaupa Node.js uwezo wa I/O usio wa kusubiri (asynchronous) na usiozuia (non-blocking). JavaScript haiwezi kusoma faili au kusimamia socket za mtandao yenyewe. Node.js hutumia libuv kuwasiliana na mfumo wako wa uendeshaji (operating system).

Bila libuv, JavaScript ingesimama kila unaposoma faili. Programu yako ingekuwa haijibu (unresponsive).

Kwa kutumia libuv, faili husomwa kwa nyuma (background). JavaScript inaendelea kuendesha kodi nyingine.

Mfano:

console.log("Start");

fs.readFile("data.txt", "utf8", (err, data) => {
  console.log(data);
});

console.log("End");

Matokeo: Start End (maudhui ya faili)

Node.js huchapisha "End" kabla ya faili kumaliza kusomwa. Haiisubiri.

Jinsi libuv inavyosimamia kodi yako:

The Event Loop: libuv huendesha mzunguko (loop) unaokagua ikiwa kazi zimekamilika. Huweka callbacks kwenye foleni (queue) kazi zinapotimia. • Thread Pool: JavaScript hutumia thread moja. libuv hutumia mkusanyiko wa worker threads. Kwa kawaida, mkusanyiko huu una thread 4. Thread hizi hushughulikia kazi nzito kama:

  • Operesheni za mfumo wa faili
  • Utafutaji wa DNS
  • Ukandamizaji (Compression)
  • Cryptography • Networking: libuv inasimamia socket za HTTP, TCP, na UDP. Hii inaruhusu seva kushughulikia miunganisho mingi kwa wakati mmoja. • Timers: libuv inashughulikia setTimeout na setInterval.

Mtiririko wa utekelezaji unafanya kazi hivi:

  1. JavaScript huendesha kodi yako.
  2. libuv huchukua kazi nzito kwenda kwa nyuma (background).
  3. JavaScript inaendelea na mstari unaofuata.
  4. libuv hutoa taarifa kwa Event Loop kazi inapokamilika.
  5. Event Loop huendesha callback yako.

Fikiria duka la pizza.

Bila libuv, unasimama kwenye kaunta na kuuliza "Je, chakula changu kiko tayari?" kila sekunde kumi. Unazuia foleni.

Kwa kutumia libuv, unaagiza, unakaa chini, na kusubiri taarifa. Unabaki huru kufanya mambo mengine mpaka pizza itakapokuwa tayari.

Muhtasari:

• Utekelezaji wa JavaScript: V8 Engine • Event Loop: libuv • File I/O: libuv • Network: libuv • Timers: libuv

libuv ndiyo injini inayofanya Node.js iwe ya haraka.

Chanzo: https://dev.to/kavindotdev/understanding-libuv-the-engine-behind-nodejs-asynchronous-programming-3n7o