¿QUÉ ES EL EVENT LOOP EN JAVASCRIPT?

Event Loop (bucle de eventos) es el mecanismo fundamental que permite a JavaScript manejar operaciones asíncronas a pesar de ser un lenguaje single-threaded (de un solo hilo). Es el corazón de la concurrencia en JavaScript y la base sobre la que funcionan NodeJS y los navegadores.

Event Loop (bucle de eventos) es el mecanismo que permite a JavaScript ejecutar código asíncrono a pesar de ser single-threaded (un solo hilo).

Concepto clave

Es el sistema de ejecución que coordina tareas asíncronas, callbacks y la concurrencia simulada en JavaScript.

Puntos clave

  • Permite multitarea en JavaScript
  • Gestiona callbacks de forma eficiente
  • Coordina la ejecución entre el código y las APIs del entorno
  • Es la base de NodeJS

¿Cómo funciona el Event Loop?

  1. Code Input (Entrada de código): Cuando se ejecuta código con operaciones asíncronas como setTimeout, fetch o Promesas, estas se delegan a las Web APIs o Node APIs.
  2. Call Stack (Pila de llamadas): JavaScript ejecuta el código síncrono de forma secuencial. Solo puede ejecutar una función a la vez.
  3. Web APIs / Node APIs: Procesan las operaciones asíncronas (temporizadores, peticiones HTTP, lectura de archivos, etc.).
  4. Task Queue y Microtask Queue: Una vez completadas las operaciones asíncronas, los callbacks se colocan en:
    • Task Queue: Para setTimeout, setInterval, eventos del DOM
    • Microtask Queue: Para Promesas y procesamientos de mayor prioridad
  5. Event Loop: Event Loop es el bucle que verifica constantemente si el Call Stack está vacío. Si lo está, mueve la siguiente tarea de las colas al Call Stack para su ejecución.

Orden de prioridad importante

Event Loop siempre ejecuta primero todas las promesas antes de procesar las tareas normales de la cola.

Ejemplo práctico

Orden de ejecución típico:

  1. Promesas
  2. Tareas de la cola (setTimeout, fetch, etc.)

Idea clave

"JavaScript no corre en paralelo... simula concurrencia"

JavaScript es single-threaded, pero gracias al Event Loop puede simular multitarea de forma muy eficiente.

¿Dónde se usa?

  • En navegadores (manejo de eventos, DOM, fetch).
  • En NodeJS (operaciones I/O, archivos, red).
  • En cualquier API web asíncrona.