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
}
}