Sobes.tech
Intern

Qual é a diferença entre Greetings 1 e Greetings 3?

sobes.tech IA

Resposta da IA

A principal diferença reside na forma de trabalhar com as filas.

Greetings 1 (síncrono):

  • Utiliza filas síncronas (DispatchQueue).
  • Ao executar uma tarefa numa fila síncrona, o thread atual fica bloqueado até a tarefa terminar.

Greetings 3 (assíncrono):

  • Utiliza filas assíncronas (DispatchQueue).
  • Ao executar uma tarefa numa fila assíncrona, o thread atual não fica bloqueado e pode continuar a trabalhar. A tarefa é executada noutro thread do pool de threads.

Aqui estão as diferenças-chave na tabela:

Característica Greetings 1 (Síncrono) Greetings 3 (Assíncrono)
Tipo de fila Síncrona (DispatchQueue) Assíncrona (DispatchQueue)
Trabalho do thread O thread atual fica bloqueado O thread atual não fica bloqueado
Threads de execução A tarefa é executada no mesmo thread A tarefa é executada num thread de fundo
Aplicação Operações simples sequenciais Operações que não devem bloquear a UI

Exemplo de código (abstrato, demonstrando o conceito):

// Greetings 1
let syncQueue = DispatchQueue(label: "com.exemplo.sync")
syncQueue.sync {
    // Tarefa prolongada
    print("Greetings 1: Tarefa prolongada concluída") // Este print ocorrerá após a tarefa
}
print("Greetings 1: O thread continuará após o sync") // Este print ocorrerá após a tarefa

// Greetings 3
let asyncQueue = DispatchQueue(label: "com.exemplo.async")
asyncQueue.async {
    // Tarefa prolongada
    print("Greetings 3: Tarefa prolongada concluída") // Este print pode ocorrer mais tarde
}
print("Greetings 3: O thread continuará imediatamente após o async") // Este print ocorre imediatamente

A escolha entre execução síncrona e assíncrona depende de se é necessário bloquear o thread atual ou permitir que ele continue a trabalhar enquanto a tarefa de fundo é executada. No desenvolvimento iOS, a execução assíncrona é frequentemente usada para realizar operações prolongadas (por exemplo, pedidos de rede, processamento de dados) em segundo plano, para não bloquear o thread principal e evitar que a interface do utilizador congele.