Síncrono vs Assíncrono (Sync vs Async)

Definição

A diferença entre síncrono e assíncrono está em como o programa lida com tarefas que envolvem espera, como leitura de arquivos, chamadas de rede ou timers.

  • Em um código síncrono, as tarefas são executadas uma de cada vez, na ordem em que aparecem no código.
    Cada operação precisa terminar antes que a próxima comece.

  • Em um código assíncrono, as tarefas não bloqueiam a execução principal. Elas podem ser agendadas para serem finalizadas no futuro, enquanto o restante do código continua sendo executado.

Objetivos do modelo assíncrono

  • Evitar travamentos em tarefas demoradas (como chamadas de rede ou leitura de disco).
  • Manter aplicações responsivas, especialmente em interfaces gráficas ou servidores.
  • Permitir execução de múltiplas tarefas ao mesmo tempo, sem esperar cada uma terminar antes de iniciar a próxima.

Exemplo prático: diferença na ordem de execução

Código síncrono

function tarefaSincrona() {
  console.log("1. Início");
  console.log("2. Processando...");
  console.log("3. Fim");
}

tarefaSincrona();

Saída:

1. Início
2. Processando...
3. Fim

A execução é sequencial e previsível. Cada linha só roda depois que a anterior termina.

Código assíncrono

function tarefaAssincrona() {
  console.log("1. Início");

  setTimeout(() => {
    console.log("3. Processando... (após 2s)");
  }, 2000);

  console.log("2. Fim");
}

tarefaAssincrona();

Saída:

1. Início
2. Fim
3. Processando... (após 2s)

Neste caso, o setTimeout agenda a tarefa para o futuro, permitindo que o programa continue executando o restante do código imediatamente.

ℹ️ Isso mostra que, no modelo assíncrono, a ordem visual do código nem sempre reflete a ordem real de execução.

Exemplos com retorno de valor

Código síncrono com retorno direto

function obterValorSincrono() {
  return "valor imediato";
}

const resultado = obterValorSincrono();
console.log("Resultado:", resultado);

Saída:

Resultado: valor imediato

Código assíncrono com callback

function obterValorAssincrono(callback) {
  setTimeout(() => {
    callback("valor após espera");
  }, 1000);
}

obterValorAssincrono((resultado) => {
  console.log("Resultado (assíncrono):", resultado);
});

Saída:

Resultado (assíncrono): valor após espera
  • Aqui, o valor não está disponível imediatamente.

  • O resultado é entregue via callback, quando a tarefa assíncrona termina.

O ciclo assíncrono

[Requisição feita]
     ↓
[Evento assíncrono é agendado]
     ↓
[Execução principal continua]
     ↓
[Resultado é tratado quando estiver pronto]

Esse modelo é especialmente útil em:

  • Aplicações web
  • Interfaces gráficas
  • Servidores de alta concorrência
  • Qualquer sistema que interaja com I/O externo (banco de dados, rede, arquivos)

Quando usar cada um

A escolha entre execução síncrona e assíncrona depende do tipo de tarefa envolvida:

Situação Melhor abordagem
Operações rápidas e determinísticas Síncrona
Tarefas de rede ou I/O Assíncrona
Interfaces e sistemas reativos Assíncrona
Algoritmos lineares simples Síncrona

ℹ️ Em linguagens modernas como JavaScript, Python (com asyncio), C# e Rust, o modelo assíncrono é amplamente adotado para tarefas que envolvem espera.

Relacionados

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com