TechLead
Lección 2 de 8
5 min de lectura
Node.js Avanzado

Event Loop en profundidad

Entiende las fases del event loop y el orden de ejecución en Node.js

¿Qué es el Event Loop?

El event loop permite a Node.js hacer I/O no bloqueante aunque JavaScript sea de un solo hilo. Las operaciones se delegan al sistema y se ejecutan callbacks cuando terminan.

🔄 Fases del Event Loop

1
Timers - setTimeout y setInterval
2
Pending callbacks - I/O diferido
3
Idle, prepare - uso interno
4
Poll - I/O y callbacks
5
Check - setImmediate
6
Close callbacks - close

Orden de ejecución

console.log('1: inicio');

setTimeout(() => console.log('2: setTimeout'), 0);
setImmediate(() => console.log('3: setImmediate'));
Promise.resolve().then(() => console.log('4: promise'));
process.nextTick(() => console.log('5: nextTick'));

console.log('6: fin');

Microtasks vs Macrotasks

Microtasks Macrotasks
process.nextTick() setTimeout()
Promise.then() setInterval()
queueMicrotask() setImmediate()
I/O

Las microtasks se ejecutan al final de cada fase antes de avanzar a la siguiente.

nextTick vs setImmediate

const fs = require('fs');

fs.readFile('file.txt', () => {
  setTimeout(() => console.log('timeout'), 0);
  setImmediate(() => console.log('immediate'));
});

setTimeout(() => console.log('timeout2'), 0);
setImmediate(() => console.log('immediate2'));

process.nextTick(() => console.log('nextTick'));
Promise.resolve().then(() => console.log('promise'));

Bloqueo del event loop

app.get('/slow', (req, res) => {
  const start = Date.now();
  while (Date.now() - start < 5000) {}
  res.send('done');
});

El bucle bloqueante evita que otras requests se atiendan. Para tareas CPU usa workers.

💡 Buenas prácticas

  • • Evita loops pesados en el hilo principal
  • • Usa streams para I/O eficiente
  • • Usa worker threads para CPU intensivo
  • • Mide latencias y bloqueos

Sigue aprendiendo