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:
- timers: Ejecuta los callbacks programados con
setTimeout()ysetInterval(). - 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.
- idle, prepare: Fases internas del Event Loop.
- 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.
- check: Ejecuta callbacks programados con
setImmediate(). - 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.