Sobes.tech
Middle

¿Qué es Grand Central Dispatch y cómo se utiliza en el desarrollo de iOS?

sobes.tech AI

Respuesta de la IA

Grand Central Dispatch (GCD) — una API de bajo nivel para gestionar la multitarea, que proporciona un grupo de hilos del sistema y planifica la ejecución de tareas en ellos.

Conceptos principales de GCD:

  • Colas de despacho: Colas donde se colocan bloques de código (tareas) para su ejecución.
    • Colas seriales: Ejecutan bloques en orden de adición, uno a la vez.
    • Colas concurrentes: Ejecutan bloques en paralelo, pero en orden de adición.
  • Tareas (Bloques): Unidades de trabajo enviadas a las colas de despacho.
  • Fuentes de despacho: Monitoreo de eventos del sistema (archivos, sockets, señales), que invoca la ejecución de bloques cuando ocurren.

Se usa para:

  1. Ejecutar operaciones en segundo plano: Cargar datos de la red, procesar imágenes, cálculos complejos, para no bloquear el hilo principal (UI).

    DispatchQueue.global(qos: .userInitiated).async {
        // Ejecutar operación intensiva en recursos
        let processedData = performHeavyProcessing()
    
        DispatchQueue.main.async {
            // Actualizar la UI en el hilo principal
            updateUI(with: processedData)
        }
    }
    
  2. Planificación de tareas: Ejecución diferida o periódica.

    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
        // Este código se ejecutará en 2 segundos
        print("Ejecución diferida")
    }
    
  3. Sincronización de acceso a datos: Uso de colas seriales o DispatchQueue.concurrentPerform para controlar el acceso paralelo.

    let syncQueue = DispatchQueue(label: "com.myapp.syncdatasource", attributes: .concurrent)
    var sharedArray = [Int]()
    
    func addItem(_ item: Int) {
        syncQueue.async(flags: .barrier) { // Uso de .barrier para acceso exclusivo al escribir
            sharedArray.append(item)
        }
    }
    
    func processItems() {
        syncQueue.sync { // Lectura síncrona
            for item in sharedArray {
                print(item)
            }
        }
    }
    

Ventajas sobre la gestión manual de hilos (POSIX threads):

  • Fácil de usar: Mayor nivel de abstracción.
  • Eficiencia: GCD gestiona de manera más eficiente el grupo de hilos del sistema, reduciendo costos.
  • Escalabilidad: Se adapta automáticamente al número de núcleos del procesador.

Tipos de QoS (Calidad de Servicio): Define la prioridad de la tarea para el planificador de GCD.

QoS Aplicación
userInteractive Actualizaciones de UI, animaciones, respuesta rápida
userInitiated Tareas iniciadas por el usuario, que requieren finalización rápida (cargar, procesar fotos)
default Prioridad por defecto, entre userInitiated y utility
utility Tareas de larga duración sin urgencia (carga, indexación)
background Tareas que no son visibles para el usuario (copias de seguridad, sincronización en segundo plano)
unspecified Prioridad no establecida, determinada por el sistema