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:
-
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) } } -
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") } -
Sincronización de acceso a datos: Uso de colas seriales o
DispatchQueue.concurrentPerformpara 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 |