Sobes.tech
Middle+

Como funciona o ciclo de eventos (Event Loop) no Node.js?

sobes.tech IA

Resposta da IA

Event Loop — é um mecanismo que permite ao Node.js realizar operações de I/O não bloqueantes, apesar de JavaScript ser uma linguagem de thread único. O Event Loop monitora continuamente a pilha de chamadas, a fila de callbacks e várias filas de eventos (temporizadores, I/O).

Fases principais do Event Loop:

  1. timers: Executa os callbacks agendados com setTimeout() e setInterval().
  2. pending callbacks: Executa callbacks de operações de entrada/saída do sistema (por exemplo, erros de rede), atrasados até à próxima iteração do Event Loop.
  3. idle, prepare: Fases internas do Event Loop.
  4. poll:
    • Calcula quanto tempo bloquear e consultar operações de entrada/saída.
    • Processa eventos na fila de callbacks de I/O quando atingem um limite ou o tempo se esgota.
  5. check: Executa callbacks agendados com setImmediate().
  6. close callbacks: Executa callbacks de encerramento, por exemplo, socket.destroy().

process.nextTick() e microtarefas (promessas, queueMicrotask()) são executadas entre fases do Event Loop e antes de passar para a próxima fase ou terminar a fase atual. process.nextTick() tem prioridade mais alta que microtarefas.

// Exemplos de agendamento de tarefas
console.log('Início');

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

setImmediate(() => {
  console.log('setImmediate');
});

process.nextTick(() => {
  console.log('nextTick');
});

Promise.resolve().then(() => {
  console.log('Promise');
});

console.log('Fim');

// Ordem típica de execução (pode variar dependendo da versão do Node.js e carga):
// Início
// Fim
// nextTick
// Promise
// Timer 0  (Executa na fase timers)
// setImmediate (Executa na fase check)

O Event Loop permite ao Node.js processar eficientemente muitas requisições paralelas sem criar uma thread separada para cada uma, garantindo alto desempenho.