12 ‐ Síncrono vs Assíncrono - sabrinabm94/javascript GitHub Wiki
12 - Síncrono vs Assíncrono no Javascript
Quando estamos falando sobre programação em JavaScript, é essencial compreender a diferença entre código síncrono e assíncrono. Vamos explicar esses conceitos e utilizar exemplos para facilitar o entendimento neste capítulo.
12.1 Síncrono (Sync)
Quando nos referimos a operações síncronas em JavaScript, estamos falando sobre tarefas que são realizadas em uma sequência linear, uma após a outra. Isso significa que o código espera pela conclusão de uma tarefa antes de prosseguir para a próxima.
function syncTask() {
console.log('Início da tarefa síncrona...');
// Simulando uma tarefa que leva 2 segundos para ser concluída
for (let i = 0; i < 2000000000; i++) {}
console.log('Tarefa síncrona concluída.');
}
console.log('Início do programa.');
syncTask();
console.log('Fim do programa.');
Neste exemplo, a função syncTask
é executada de forma síncrona:
O programa acima aguarda a conclusão dessa função antes de imprimir "Fim do programa." no console. Isso acontece porque o JavaScript executa o código de maneira sequencial, de cima para baixo, uma função de cada vez.
12.2 Assíncrono (Async)
Por outro lado, as operações assíncronas não bloqueiam a execução do código enquanto aguardam a conclusão de uma tarefa. Em vez disso, o JavaScript continua executando outras operações e volta para lidar com o resultado da tarefa assíncrona quando estiver disponível. Vamos ver um exemplo:
function asyncTask() {
console.log('Início da tarefa assíncrona...');
// Simulando uma tarefa assíncrona que leva 2 segundos para ser concluída
setTimeout(() => {
console.log('Tarefa assíncrona concluída.');
}, 2000);
}
console.log('Início do programa.');
asyncTask();
console.log('Fim do programa.');
Neste exemplo, a função asyncTask
é executada de forma assíncrona usando setTimeout
:
O programa não espera pela conclusão dessa função e continua a executar, imprimindo "Fim do programa." no console imediatamente após chamar asyncTask
.
12.3 Síncrono vs Assíncrono
Sincronismo | Assincronismo | |
---|---|---|
Definição | Execução sequencial, uma operação após a outra. | Execução simultânea de várias operações. |
Bloqueio de Thread | Bloqueia a execução do código até que a operação atual seja concluída. | Não bloqueia a execução do código enquanto aguarda a conclusão de uma operação. |
Exemplo | Chamadas de função síncronas, loops for, operações de leitura e escrita de arquivos bloqueantes. | Requisições de rede, manipulação de eventos, operações de I/O não bloqueantes. |
Desempenho | Geralmente mais rápido para operações simples, mas pode ser lento para operações bloqueantes. | Mais eficiente para operações de I/O, não bloqueia a thread principal, melhorando a responsividade do aplicativo. |
Conclusão de Tarefas | A próxima tarefa só começa quando a anterior é concluída. | As tarefas podem ser executadas em paralelo, sem esperar pela conclusão da anterior. |
Espero que tenha ficado claro o conceito de sincronismo/assincronismo para o Javascript. No próximo capítulo, vamos explorar ainda mais sobre funções assíncronas em JavaScript.