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:
- timers: Executa os callbacks agendados com
setTimeout()esetInterval(). - 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.
- idle, prepare: Fases internas do Event Loop.
- 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.
- check: Executa callbacks agendados com
setImmediate(). - 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.