Sobes.tech
Middle

Quais são os tipos de filas utilizados em main e global?

sobes.tech IA

Resposta da IA

A fila principal (Main queue) é uma fila sequencial (serial queue) que funciona no thread principal (main thread) da aplicação. É usada para atualizar a interface do utilizador e tratar eventos de UI. Todas as tarefas enviadas para a fila principal são executadas de forma estritamente sequencial.

As filas globais (Global queues) são filas paralelas (concurrent queues) fornecidas pelo sistema. São usadas para executar tarefas em segundo plano, não relacionadas com a UI, o que evita bloquear o thread principal. Existem várias filas globais com diferentes prioridades de qualidade de serviço (Quality of Service, QoS).

Aqui está uma tabela com os principais tipos de filas globais por prioridade QoS:

Prioridade QoS Descrição Exemplo de uso
userInteractive A prioridade mais alta. Usada para tarefas que requerem execução imediata para a interatividade da UI. Animações, processamento de eventos de toque.
userInitiated Prioridade alta. Usada para tarefas iniciadas diretamente pelo utilizador e que requerem resultados rápidos. Exibir resultados de pesquisa, carregar conteúdo para exibir.
default Prioridade padrão. Entre userInitiated e utility. Tarefas para as quais a prioridade não é explicitamente definida.
utility Prioridade média. Usada para tarefas prolongadas que são executadas em segundo plano com progresso. Carregamento de ficheiros, processamento de dados.
background Prioridade baixa. Usada para tarefas em segundo plano que não requerem atenção do utilizador. Sincronização de dados, backups.
unspecified Prioridade não especificada. O sistema a determina com base em outros fatores. Raramente usada.

Exemplo de envio de tarefa para a fila principal e fila global:

DispatchQueue.main.async {
    // Código para atualizar a UI
}

DispatchQueue.global(qos: .userInitiated).async {
    // Código para executar uma tarefa de fundo com alta prioridade
    // Após a execução, pode ser necessário voltar à fila principal para atualizar a UI
    DispatchQueue.main.async {
        // Atualização da UI após a conclusão da tarefa de fundo
    }
}