Middle
Fala-me sobre o ciclo de eventos (event loop).
sobes.tech IA
Resposta da IA
O ciclo de eventos é a base do trabalho assíncrono em JavaScript. Ele controla a execução do código, o tratamento de eventos e a interação com o mundo exterior.
Componentes principais:
- Heap (Heap): Área de memória para alocação de objetos.
- Stack (Pilha): Local onde os contextos de execução das funções são armazenados. Quando uma função é chamada, ela é colocada na pilha, e quando termina, é removida.
- Web APIs: Interfaces fornecidas pelo navegador (DOM, AJAX, Timers, etc.). Elas lidam com operações assíncronas.
- Fila de callbacks (Callback Queue): Fila de mensagens relacionadas a eventos. Web APIs colocam aqui os callbacks de operações assíncronas concluídas.
- Ciclo de eventos (Event Loop): Monitora continuamente a pilha e a fila de callbacks. Se a pilha estiver vazia, ela pega o primeiro callback da fila e o coloca na pilha para execução.
Processo:
- O código síncrono é executado na pilha.
- Operações assíncronas (por exemplo,
setTimeout,fetch) são enviadas às Web APIs. - Quando uma operação assíncrona termina, seu callback é colocado na fila de callbacks.
- O ciclo de eventos espera até que a pilha fique vazia.
- Quando a pilha está vazia, o ciclo de eventos pega o primeiro callback da fila e o coloca na pilha, onde é executado.
Exemplo com setTimeout:
console.log('Start');
setTimeout(() => {
console.log('Inside setTimeout');
}, 0);
console.log('End');
A saída será:
Start
End
Inside setTimeout
Apesar do timeout de 0 ms, o callback do setTimeout é executado após o código síncrono porque entra na fila e espera a pilha ficar vazia.
No Node.js, também existe um ciclo de eventos, mas com algumas diferenças nas fases de processamento das filas.