Sobes.tech
Middle

¿Cuáles son los tipos de colas utilizados en main y global?

sobes.tech AI

Respuesta de la IA

La cola principal (Main queue) es una cola secuencial (serial queue) que funciona en el hilo principal (main thread) de la aplicación. Se utiliza para actualizar la interfaz de usuario y manejar eventos de UI. Todas las tareas enviadas a la cola principal se ejecutan de manera estrictamente secuencial.

Las colas globales (Global queues) son colas paralelas (concurrent queues) proporcionadas por el sistema. Se usan para realizar tareas en segundo plano, no relacionadas con la UI, lo que evita bloquear el hilo principal. Existen varias colas globales con diferentes prioridades de calidad de servicio (Quality of Service, QoS).

Aquí hay una tabla con los principales tipos de colas globales según la prioridad QoS:

Prioridad QoS Descripción Ejemplo de uso
userInteractive La prioridad más alta. Se usa para tareas que requieren ejecución inmediata para la interactividad de la UI. Animaciones, manejo de eventos táctiles.
userInitiated Alta prioridad. Se usa para tareas iniciadas directamente por el usuario y que requieren resultados rápidos. Mostrar resultados de búsqueda, cargar contenido para mostrar.
default Prioridad por defecto. Entre userInitiated y utility. Tareas para las que no se especifica prioridad.
utility Prioridad media. Se usa para tareas prolongadas que se ejecutan en segundo plano con progreso. Carga de archivos, procesamiento de datos.
background Baja prioridad. Se usa para tareas en segundo plano que no requieren atención del usuario. Sincronización de datos, copias de seguridad.
unspecified Prioridad no especificada. El sistema la determina en función de otros factores. Rara vez se usa.

Ejemplo de envío de tareas a la cola principal y a la cola global:

DispatchQueue.main.async {
    // Código para actualizar la UI
}

DispatchQueue.global(qos: .userInitiated).async {
    // Código para realizar una tarea en segundo plano con alta prioridad
    // Después de completar, puede ser necesario volver a la cola principal para actualizar la UI
    DispatchQueue.main.async {
        // Actualización de la UI después de completar la tarea en segundo plano
    }
}