Sobes.tech
Middle

Cuéntame sobre el ciclo de eventos (event loop).

sobes.tech AI

Respuesta de la IA

El ciclo de eventos es la base del trabajo asíncrono en JavaScript. Controla la ejecución del código, el manejo de eventos y la interacción con el mundo exterior.

Componentes principales:

  • Heap (Montón): Área de memoria para asignar objetos.
  • Pila (Stack): Lugar donde se almacenan los contextos de ejecución de funciones. Cuando se llama a una función, se coloca en la pila, y cuando termina, se elimina.
  • Web APIs: Interfaces proporcionadas por el navegador (DOM, AJAX, Timers, etc.). Manejan operaciones asíncronas.
  • Cola de callbacks (Callback Queue): Cola de mensajes relacionados con eventos. Web APIs colocan aquí los callbacks de operaciones asíncronas finalizadas.
  • Ciclo de eventos (Event Loop): Monitorea continuamente la pila y la cola de callbacks. Si la pila está vacía, toma el primer callback de la cola y lo coloca en la pila para su ejecución.

Proceso:

  1. El código síncrono se ejecuta en la pila.
  2. Las operaciones asíncronas (por ejemplo, setTimeout, fetch) se envían a Web APIs.
  3. Cuando una operación asíncrona termina, su callback se coloca en la cola de callbacks.
  4. El ciclo de eventos espera a que la pila esté vacía.
  5. Cuando la pila está vacía, el ciclo de eventos toma el primer callback de la cola y lo coloca en la pila, donde se ejecuta.

Ejemplo con setTimeout:

console.log('Start');

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

console.log('End');

La salida será:

Start
End
Inside setTimeout

A pesar de que el timeout es de 0 ms, el callback de setTimeout se ejecuta después del código síncrono porque entra en la cola y espera a que la pila se vacíe.

En Node.js, también existe un ciclo de eventos, pero con algunas diferencias en las fases de manejo de las colas.