Middle
Fale sobre a fila global na programação multithread no iOS.
sobes.tech IA
Resposta da IA
A fila global (Global Queue) no Grand Central Dispatch (GCD) são filas predefinidas do sistema que estão disponíveis para todas as aplicações. São filas concorrentes, o que significa que as tarefas nelas podem ser executadas em paralelo em diferentes threads.
Características principais:
- Tipos: Variam de acordo com o nível de qualidade de serviço (QoS - Quality of Service).
- QoS: Define a prioridade de execução das tarefas, influenciando quais tarefas o sistema deve completar mais rapidamente.
- Paralelismo: Permitem executar múltiplas tarefas simultaneamente.
- Sistema: São criadas e geridas pelo sistema operativo.
Tipos de filas globais (por ordem decrescente de prioridade):
| Nível de QoS | Descrição |
|---|---|
userInteractive |
Tarefas que afetam diretamente a interface do utilizador (animações, eventos). |
userInitiated |
Tarefas iniciadas pelo utilizador, mas que não bloqueiam a UI (carregamento de conteúdo). |
default |
Nível por defeito sem especificação explícita de QoS. |
utility |
Tarefas que requerem tempo de execução, mas não afetam a UI de forma imediata (carregamento de ficheiros grandes). |
background |
Tarefas que são executadas em segundo plano, não visíveis para o utilizador (sincronização de dados). |
unspecified |
Usado raramente quando o QoS não é importante. Equivale a default. |
Acesso às filas globais:
// Obter uma fila global com um nível de QoS específico
let userInitiatedQueue = DispatchQueue.global(qos: .userInitiated)
// Obter a fila global por defeito
let defaultQueue = DispatchQueue.global()
Uso de filas globais para executar tarefas:
// Executar uma tarefa de forma assíncrona numa fila em segundo plano
DispatchQueue.global(qos: .background).async {
// Código que demora a executar, sem bloquear a UI
}
// Executar uma tarefa de forma síncrona na fila (menos comum para filas globais)
DispatchQueue.global(qos: .userInitiated).sync {
// Código que deve ser concluído antes de continuar com o thread atual
}
É importante lembrar:
- Não executar tarefas que afetem diretamente a interface do utilizador em filas globais (exceto
userInteractivepara operações muito rápidas). Para atualizar a UI, use a fila principal (DispatchQueue.main). - As filas globais destinam-se à execução em paralelo. A ordem de execução das tarefas pode não estar garantida.
- Ao usar
syncnuma fila global, o thread atual ficará bloqueado até que a tarefa termine. Isto pode causar bloqueio da UI se for chamado a partir do thread principal.