Middle
O que é o Grand Central Dispatch e como é utilizado no desenvolvimento iOS?
sobes.tech IA
Resposta da IA
Grand Central Dispatch (GCD) — uma API de baixo nível para gestão de multitarefa, que fornece um pool de threads do sistema e planeia a execução de tarefas sobre eles.
Conceitos principais do GCD:
- Filas de despacho: Filas onde são colocados blocos de código (tarefas) para execução.
- Filas seriais: Executam blocos na ordem de adição, um de cada vez.
- Filas concorrentes: Executam blocos em paralelo, mas na ordem de adição.
- Tarefas (Blocos): Unidades de trabalho enviadas às filas de despacho.
- Fontes de despacho: Monitorização de eventos do sistema (ficheiros, sockets, sinais), que invocam a execução de blocos quando ocorrem.
Usado para:
-
Executar operações em segundo plano: Carregar dados da rede, processar imagens, cálculos complexos, para não bloquear o thread principal (UI).
DispatchQueue.global(qos: .userInitiated).async { // Executar operação intensiva em recursos let processedData = performHeavyProcessing() DispatchQueue.main.async { // Atualizar a UI no thread principal updateUI(with: processedData) } } -
Planeamento de tarefas: Execução diferida ou periódica.
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { // Este código será executado em 2 segundos print("Execução diferida") } -
Sincronização de acesso a dados: Uso de filas seriais ou
DispatchQueue.concurrentPerformpara controlar o acesso 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 acesso exclusivo ao escrever sharedArray.append(item) } } func processItems() { syncQueue.sync { // Leitura síncrona for item in sharedArray { print(item) } } }
Vantagens em relação à gestão manual de threads (POSIX threads):
- Facilidade de uso: Nível de abstração superior.
- Eficiência: GCD gere de forma mais eficiente o pool de threads do sistema, reduzindo custos.
- Escalabilidade: Adapta-se automaticamente ao número de núcleos do processador.
Tipos de QoS (Qualidade de Serviço): Define a prioridade da tarefa para o planeador GCD.
| QoS | Aplicação |
|---|---|
| userInteractive | Atualizações de UI, animações, resposta rápida |
| userInitiated | Tarefas iniciadas pelo utilizador, que requerem rápida conclusão (carregamento, processamento de fotos) |
| default | Prioridade padrão, entre userInitiated e utility |
| utility | Tarefas de longa duração sem urgência (carregamento, indexação) |
| background | Tarefas que não são visíveis ao utilizador (cópias de segurança, sincronização em segundo plano) |
| unspecified | Prioridade não definida, determinada pelo sistema |