Junior
¿Qué es GCD (Grand Central Dispatch) en el contexto del desarrollo en iOS?
sobes.tech AI
Respuesta de la IA
GCD (Grand Central Dispatch) es una API de bajo nivel de Apple para gestionar operaciones paralelas y la ejecución asíncrona de código en aplicaciones. Proporciona un mecanismo para enviar tareas a colas de ejecución, que son gestionadas por el sistema.
Características clave:
- Colas de tareas (Dispatch Queues): estructuras FIFO en las que se añaden bloques de código (closures) para su ejecución.
- Derivan de tipos concurrent (paralelo) y serial (secuencial).
- Ofrecen colas globales del sistema y permiten crear colas personalizadas.
- Bloques (Blocks): unidades de trabajo enviadas a las colas.
- Gestión de hilos: abstrae al desarrollador de la gestión directa de hilos, permitiendo que el sistema distribuya las tareas de manera óptima entre los núcleos de procesador disponibles.
- Prioridades: permite especificar prioridades para tareas en las colas globales concurrentes del sistema.
Tipos de colas:
- Serial (secuenciales): ejecutan tareas estrictamente una a una, en el orden en que se añaden. Garantizan que solo una tarea de esta cola se ejecute en cualquier momento.
- La cola principal (
DispatchQueue.main) es una cola serial especial para actualizaciones de UI. - Colas seriales personalizadas.
- La cola principal (
- Concurrentes: pueden ejecutar varias tareas simultáneamente (en paralelo), sin garantizar el orden de finalización.
- Colas globales concurrentes del sistema con diferentes niveles de calidad de servicio (QoS).
- Colas concurrentes personalizadas.
Calidad de servicio (QoS) para colas concurrentes globales:
| Nivel QoS | Descripción | Ejemplos de uso |
|---|---|---|
userInteractive |
Tareas con las que el usuario interactúa activamente. | Animaciones, procesamiento de eventos UI. |
userInitiated |
Tareas iniciadas por el usuario que requieren un resultado inmediato. | Carga de contenido al pulsar un botón. |
utility |
Tareas que toman tiempo y no requieren resultados inmediatos. | Carga de datos, procesamiento de imágenes en segundo plano. |
background |
Tareas en segundo plano, invisibles para el usuario. | Actualización de caché, sincronización de datos. |
unspecified |
Nivel de QoS no especificado, el sistema lo determina automáticamente. | API antiguo o tareas del sistema de bajo nivel. |
Ejemplo simple de uso:
// Ejecutar tarea en segundo plano (cola concurrente global)
DispatchQueue.global(qos: .userInitiated).async {
// Ejecutar operación de larga duración
print("Realizando tarea en segundo plano")
// Volver al hilo principal para actualizar la UI
DispatchQueue.main.async {
print("Actualizando UI en el hilo principal")
}
}
GCD simplifica el trabajo con la multitarea y el paralelismo, haciendo el código más legible y menos propenso a errores de condiciones de carrera en comparación con la gestión de hilos de bajo nivel (por ejemplo, Thread).