Sobes.tech
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:

  1. O código síncrono é executado na pilha.
  2. Operações assíncronas (por exemplo, setTimeout, fetch) são enviadas às Web APIs.
  3. Quando uma operação assíncrona termina, seu callback é colocado na fila de callbacks.
  4. O ciclo de eventos espera até que a pilha fique vazia.
  5. 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.