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
e4
). - 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