Sobes.tech
Middle+

Explica cómo funciona el Event Loop en el contexto del lenguaje Dart y el framework Flutter.

sobes.tech AI

Respuesta de la IA

Dart es un lenguaje de un solo hilo, pero utiliza el Event Loop para manejar operaciones asíncronas.

El Event Loop consta de dos colas principales:

  1. Cola de Microtareas: Para tareas asíncronas de alta prioridad y cortas. Se ejecutan inmediatamente después de completar la operación actual y antes de comenzar la siguiente iteración del Event Loop.
  2. Cola de Eventos: Para eventos externos (como I/O, temporizadores, entrada del usuario). Las tareas de esta cola se procesan después de que la Cola de Microtareas esté vacía.

Proceso de trabajo:

  • El hilo principal ejecuta código sincrónico.
  • Cuando se encuentra una operación asíncrona (por ejemplo, Future, Stream, temporizador), se registra y se envía a la cola correspondiente.
  • El Event Loop verifica constantemente la Cola de Microtareas. Si no está vacía, ejecuta sus tareas hasta que esté vacía.
  • Luego, verifica la Cola de Eventos. Si no está vacía, toma la primera tarea y la ejecuta.
  • Este ciclo se repite hasta que ambas colas estén vacías y no haya operaciones asíncronas en espera.

Ejemplo de uso de Future y scheduleMicrotask:

void main() {
  print('1. Inicio del main');

  // Añade una microtarea a la Cola de Microtareas
  scheduleMicrotask(() {
    print('3. Microtarea en ejecución');
  });

  // Crea una operación asíncrona que se añadirá a la Cola de Eventos tras finalizar
  Future(() {
    print('4. Future en ejecución (de la Cola de Eventos)');
  });

  // Añade otra microtarea a la Cola de Microtareas
  scheduleMicrotask(() {
    print('5. Segunda microtarea en ejecución');
  });

  // Crea un Future con retardo, también enviado a la Cola de Eventos
  Future.delayed(Duration(milliseconds: 10), () {
    print('6. Future retrasado en ejecución (de la Cola de Eventos)');
  });

  print('2. Fin del main');
}

// Orden esperado de ejecución:
// 1. Inicio del main
// 2. Fin del main
// 3. Microtarea en ejecución
// 5. Segunda microtarea en ejecución
// 4. Future en ejecución (de la Cola de Eventos)
// 6. Future retrasado en ejecución (de la Cola de Eventos)

En Flutter, el Event Loop gestiona la ejecución de tareas de la interfaz de usuario (como redibujar widgets), manejo de gestos, solicitudes de red y otras operaciones asíncronas, asegurando que la aplicación funcione suavemente sin bloquear la UI. Tareas importantes de Flutter (como la planificación de cuadros para renderizado) a menudo usan la Cola de Microtareas para lograr una mayor prioridad.