Loop de Eventos JavaScript: Execução Assíncrona Não Bloqueante
O loop de eventos JavaScript gerencia operações assíncronas executando callbacks de uma fila quando a pilha de chamadas está vazia, evitando o bloqueio do thread.
Loop. Control structure repeating code until condition is met. Generated ELI5 content
graph LR
Center["Loop de Eventos JavaScript: Execução Assíncrona Não Bloqueante"]:::main
Pre_variable["variable"]:::pre --> Center
click Pre_variable "/terms/variable"
Rel_iteration["iteration"]:::related -.-> Center
click Rel_iteration "/terms/iteration"
Rel_recursion["recursion"]:::related -.-> Center
click Rel_recursion "/terms/recursion"
Rel_closed_loop_life_support["closed-loop-life-support"]:::related -.-> Center
click Rel_closed_loop_life_support "/terms/closed-loop-life-support"
classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
linkStyle default stroke:#4b5563,stroke-width:2px;
🧒 Explique como se eu tivesse 5 anos
Pense em [JavaScript](/pt/terms/javascript) como um chef que só pode fazer uma coisa de cada vez. Se ele precisar assar um bolo (uma tarefa longa), ele não fica parado esperando. Ele coloca o bolo no forno e define um timer, depois começa imediatamente a preparar uma salada (outra tarefa). Quando o timer do forno toca, o chef termina a salada, tira o bolo e, em seguida, passa para outra coisa. O loop de eventos é como o sistema do chef para gerenciar essas tarefas de 'espera', garantindo que elas sejam tratadas quando estiverem prontas, sem interromper o outro trabalho.
🤓 Expert Deep Dive
O loop de eventos JavaScript é um modelo de concorrência que orquestra a execução de código, tarefas e eventos. Ele monitora continuamente a pilha de chamadas e a(s) fila(s) de tarefas. O código síncrono é executado diretamente na pilha de chamadas. Operações assíncronas (por exemplo, setTimeout, Promises, I/O) são delegadas às APIs do ambiente host, que gerenciam sua execução. Assim que uma operação assíncrona é concluída, seu callback (ou o manipulador de resolução de uma Promise) é colocado em uma fila correspondente – a fila de tarefas (para macrotarefas como setTimeout, eventos DOM) ou a fila de microtarefas (para microtarefas como Promises, queueMicrotask). A função principal do loop de eventos é, quando a pilha de chamadas está vazia, retirar tarefas da fila e executá-las. Microtarefas são geralmente processadas antes das macrotarefas. Especificamente, após a conclusão da macrotarefa atual e antes do início da próxima, o loop de eventos executará todas as microtarefas disponíveis. Isso prioriza callbacks imediatos (como resoluções de Promise) em detrimento dos adiados, garantindo a responsividade e o manuseio eficiente de operações assíncronas em diferentes ambientes JavaScript.