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.
The event loop is a fundamental process in JavaScript's runtime environments (browsers, Node.js) that enables non-blocking asynchronous behavior. Since JavaScript is single-threaded, it can execute only one operation at a time. Without the event loop, long-running tasks (e.g., network requests, timers) would halt the main thread, leading to an unresponsive application. The event loop operates alongside the call stack, browser Web APIs (or Node.js APIs), and a task queue (or callback queue). When an asynchronous task is initiated, it's delegated to the appropriate API. Upon completion, its associated callback function is placed in the task queue. The event loop continuously checks if the call stack is clear. If it is, it dequeues the oldest callback from the task queue and pushes it onto the call stack for execution. This cycle ensures that asynchronous operations are handled efficiently without blocking the primary thread.
graph LR
Center["Loop de Eventos JavaScript Execução Assíncrona Não Bloqueante"]:::main
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](/pt/terms/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.