Sobes.tech
Middle+

¿Cómo funciona el ciclo de eventos (Event Loop) en Node.js?

sobes.tech AI

Respuesta de la IA

Event Loop — es un mecanismo que permite a Node.js realizar operaciones de E/S no bloqueantes, a pesar de que JavaScript es un lenguaje de un solo hilo. El Event Loop monitorea continuamente la pila de llamadas, la cola de callbacks y varias colas de eventos (temporizadores, E/S).

Fases principales del Event Loop:

  1. timers: Ejecuta los callbacks programados con setTimeout() y setInterval().
  2. pending callbacks: Ejecuta callbacks de operaciones de entrada/salida del sistema (por ejemplo, errores de red), retrasados hasta la siguiente iteración del Event Loop.
  3. idle, prepare: Fases internas del Event Loop.
  4. poll:
    • Calcula cuánto tiempo bloquear y consultar operaciones de entrada/salida.
    • Procesa eventos en la cola de callbacks de E/S cuando alcanzan un límite o se agota el tiempo.
  5. check: Ejecuta callbacks programados con setImmediate().
  6. close callbacks: Ejecuta callbacks de cierre, por ejemplo, socket.destroy().

process.nextTick() y las microtareas (promesas, queueMicrotask()) se ejecutan entre fases del Event Loop y antes de pasar a la siguiente fase o finalizar la actual. process.nextTick() tiene mayor prioridad que las microtareas.

// Ejemplos de programación de tareas
console.log('Inicio');

setTimeout(() => {
  console.log('Temporizador 0');
}, 0);

setImmediate(() => {
  console.log('setImmediate');
});

process.nextTick(() => {
  console.log('nextTick');
});

Promise.resolve().then(() => {
  console.log('Promise');
});

console.log('Fin');

// Orden típico de ejecución (puede variar según la versión de Node.js y la carga):
// Inicio
// Fin
// nextTick
// Promise
// Temporizador 0  (Se ejecuta en la fase timers)
// setImmediate (Se ejecuta en la fase check)

El Event Loop permite a Node.js manejar eficientemente muchas solicitudes paralelas sin crear un hilo separado para cada una, lo que garantiza un alto rendimiento.