Sobes.tech
Middle+

Explique como funciona o Event Loop no contexto da linguagem Dart e do framework Flutter.

sobes.tech IA

Resposta da IA

Dart é de thread único, mas usa o Event Loop para lidar com operações assíncronas.

O Event Loop consiste em duas filas principais:

  1. Fila de Microtarefas: Para tarefas assíncronas de alta prioridade e curtas. São executadas imediatamente após a conclusão da operação atual e antes do início da próxima iteração do Event Loop.
  2. Fila de Eventos: Para eventos externos (como I/O, temporizadores, entrada do usuário). As tarefas desta fila são processadas após a fila de microtarefas estar vazia.

Processo de funcionamento:

  • O thread principal executa código síncrono.
  • Quando uma operação assíncrona é encontrada (por exemplo, Future, Stream, temporizador), ela é registrada e enviada para a fila correspondente.
  • O Event Loop verifica constantemente a fila de microtarefas. Se ela não estiver vazia, suas tarefas são executadas até que esteja vazia.
  • Depois, verifica a fila de eventos. Se ela não estiver vazia, a primeira tarefa é retirada e executada.
  • Este ciclo se repete até que ambas as filas estejam vazias e não haja mais operações assíncronas em espera.

Exemplo de uso de Future e scheduleMicrotask:

void main() {
  print('1. Início do main');

  // Adiciona uma microtarefa à fila de microtarefas
  scheduleMicrotask(() {
    print('3. Microtarefa em execução');
  });

  // Cria uma operação assíncrona que será adicionada à fila de eventos após sua conclusão
  Future(() {
    print('4. Future em execução (da fila de eventos)');
  });

  // Adiciona outra microtarefa à fila de microtarefas
  scheduleMicrotask(() {
    print('5. Segunda microtarefa em execução');
  });

  // Cria um Future com atraso, também enviado à fila de eventos
  Future.delayed(Duration(milliseconds: 10), () {
    print('6. Future atrasado em execução (da fila de eventos)');
  });

  print('2. Fim do main');
}

// Ordem esperada de execução:
// 1. Início do main
// 2. Fim do main
// 3. Microtarefa em execução
// 5. Segunda microtarefa em execução
// 4. Future em execução (da fila de eventos)
// 6. Future atrasado em execução (da fila de eventos)

No Flutter, o Event Loop gerencia a execução de tarefas de UI (re-renderização de widgets), processamento de gestos, requisições de rede e outras operações assíncronas, garantindo o funcionamento suave do aplicativo sem bloquear a interface. Tarefas importantes do Flutter (como o agendamento de quadros para renderização) frequentemente usam a fila de microtarefas para alcançar maior prioridade.