Event Loop

Definição

O event loop é o mecanismo responsável por gerenciar a execução de tarefas assíncronas em ambientes como o JavaScript.
Ele permite que tarefas não bloqueantes (como setTimeout, Promises e eventos de rede) sejam organizadas em filas e executadas de forma ordenada, sem travar a thread principal.

O event loop verifica constantemente se há tarefas prontas para serem executadas na fila de eventos e as despacha uma a uma, garantindo que a thread principal nunca seja travada por tempo excessivo.

Objetivos do event loop

  • Coordenar a execução de tarefas assíncronas sem usar múltiplas threads.
  • Garantir que a interface (como navegadores ou Node.js) continue responsiva.
  • Controlar o fluxo entre o código principal e as operações pendentes (eventos, timers, Promises).

Exemplo prático

console.log("1. Início");

setTimeout(() => {
  console.log("2. Timeout");
}, 0);

Promise.resolve().then(() => {
  console.log("3. Promise resolvida");
});

console.log("4. Fim");

Saída esperada

1. Início
4. Fim
3. Promise resolvida
2. Timeout

Por que essa ordem?

  • O código síncrono é executado primeiro (1 e 4).
  • Promises são tratadas na microtask queue, que tem prioridade sobre setTimeout.
  • O setTimeout entra na macrotask queue e é executado depois.

O ciclo do event loop

[Executa código principal]
↓
[Verifica microtasks (Promises)]
↓
[Executa próxima macrotask (ex: setTimeout)]
↓
[Repete o ciclo]

Fila de execução: Microtasks vs. Macrotasks

  • Microtasks: Promises, queueMicrotask
  • Macrotasks: setTimeout, setInterval, I/O, eventos de clique, etc.

ℹ️ O event loop dá prioridade às microtasks antes de iniciar a próxima macrotask.

Diagrama do funcionamento interno

[Stack vazia?]
↳ Sim → Executa microtasks
↳ Microtasks vazias? → Executa próxima macrotask
↳ Repete indefinidamente

Esse comportamento explica por que Promise.then() executa antes de setTimeout(), mesmo que ambos estejam com "zero segundos" de espera.

Onde o event loop é usado

  • Navegadores (Chrome, Firefox, etc.)
  • Node.js
  • Ambientes com engines baseadas em JavaScript (como Deno)

Relacionados


Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com