...
...
Fala!
Hoje eu quero que você entenda o event loop, vou te explicar o que você precisa saber para mandar bem nas entrevistas e entender o coração do Node.
Como o nome diz o event loop é um laço de eventos responsável por gerenciar quando e como seu código é executado — especialmente quando tem tarefas assíncronas.
Tá, mas o que é uma tarefa assíncrona?
setTimeoutImportante, isso quer dizer que ele pode executar outros processos enquanto consulta dados no banco ou espera uma resposta HTTP.
O Node, por exemplo, é single-threaded (roda em uma thread principal), mas ele usa o event loop para parecer que faz várias coisas ao mesmo tempo.
Agora vou te mostrar a ideia principal do Node e é onde fica a escalabilidade dele e de outras linguagens como o Python e Java.
O Node recebe um evento, como uma requisição HTTP — event queue
O _callback_associado a esse evento é enviado para execução
Enquanto isso, o event loop continua livre para processar outros eventos.
Quando a operação assíncrona termina, o resultado é colocado de volta na fila de callbacks, e o event loop chama o callback correspondente.
O ciclo se repete indefinidamente — o loop nunca para, a menos que não haja mais nada para processar.
Node manda o evento assíncrono para uma thread secundária sem travar a fila. Quando a thread termina, o resultado do evento é enviado de volta para o loop principal e o callback é executado.
O Node executa todas essas fases, mas se não tiver processo nenhum ele pula ela, por exemplo, a fase 1 que é o timer, se não tiver um setTimeout ou setInterval no seu código ele pula essa fase.
Ele divide a execução de callbacks nessas fases e o loop vai passando por elas de forma cíclica enquanto houver tarefas para executar.
Timers
(
setTimeout
e
setInterval
) — só executa se estiver no código.
Pending callbacks
Idle, Prepare
Poll
(a mais importante)
setImmediate) dependendo do estado do loop.Check
(
setImmediate
)
Close callbacks
Algo importante de entender é isso…
O event loop do Node passa por todas as fases em ciclo contínuo, mas cada fase só faz algo se houver callbacks na fila correspondente.
Caso contrário, o Node simplesmente pula para a próxima fase.
Loop Infinito:
1️⃣ Timers -> executa setTimeout/setInterval vencidos, senão pula
2️⃣ I/O callbacks -> executa callbacks de operações I/O concluídas, senão pula
3️⃣ Idle, prepare -> interno do Node, pouca coisa pra dev ver
4️⃣ Poll -> verifica se há novas operações de I/O, senão aguarda
5️⃣ Check -> executa setImmediate, senão pula
6️⃣ Close callbacks -> executa callbacks de fechamento de sockets, senão pula
Então sim, todas as fases são "visitadas" em cada loop, mas só executam algo se tiver trabalho correspondente.
Bom pessoal é isso, espero que isso tenha te ajudado a entender.
#node