Sobes.tech
Middle

Que tipos de filas existem no Grand Central Dispatch (GCD)?

sobes.tech IA

Resposta da IA

No GCD, existem quatro tipos principais de filas:

  1. Fila principal (Main Queue):

    • Fila serial.
    • Usada para executar tarefas na thread principal da aplicação (atualizações de UI, manipulação de eventos).
    • Sempre há uma por aplicação.
  2. Filas globais concorrentes (Global Concurrent Queues):

    • Filas concorrentes.
    • Fornecidas pelo sistema.
    • Têm diferentes níveis de prioridade de qualidade de serviço (Quality of Service - QoS).
    • Podem executar várias tarefas simultaneamente.
  3. Filas seriais personalizadas (Custom Serial Queues):

    • Filas seriais criadas pelo desenvolvedor.
    • Executam tarefas sequencialmente, uma após a outra.
    • Ideais para gerir o acesso a recursos (sincronização).
  4. Filas concorrentes personalizadas (Custom Concurrent Queues):

    • Filas concorrentes criadas pelo desenvolvedor.
    • Podem executar várias tarefas simultaneamente.
    • Permitem melhor controlo da execução de tarefas em comparação com as filas globais concorrentes.

Exemplos de criação de filas:

// Fila principal
let mainQueue = DispatchQueue.main

// Uma das filas globais concorrentes (de alta prioridade)
let globalHighPriorityQueue = DispatchQueue.global(qos: .userInitiated)

// Fila serial personalizada
let customSerialQueue = DispatchQueue(label: "com.myapp.serialqueue")

// Fila concorrente personalizada
let customConcurrentQueue = DispatchQueue(label: "com.myapp.concurrentqueue", attributes: .concurrent)

Prioridades QoS para filas globais:

Prioridade QoS Descrição
.userInteractive Tarefas relacionadas com a interface do utilizador (resposta a cliques).
.userInitiated Tarefas iniciadas pelo utilizador (carregamento de conteúdo sob demanda).
.default Prioridade padrão, entre .userInitiated e .utility.
.utility Tarefas longas de fundo (transferência de ficheiros).
.background Tarefas de baixa prioridade, independentes do utilizador.
.unspecified O sistema determina a prioridade.