Execução assíncrona versus execução síncrona, o que é que isso realmente significa?

Qual é a diferença entre execução assíncrona e síncrona?

Solução

Quando você executa algo de forma síncrona, você espera que ele termine antes de passar para outra tarefa. Quando você executa algo de forma assíncrona, você pode passar para outra tarefa antes que ela termine.

Dito isto, no contexto dos computadores isto se traduz na execução de um processo ou tarefa em outro "fio". Um thread é uma série de comandos (um bloco de código) que existe como uma unidade de trabalho. O sistema operacional pode gerenciar várias threads e atribuir a uma thread uma parte ("fatia") do tempo do processador antes de mudar para outra thread para dar-lhe a vez de fazer algum trabalho. No seu núcleo (perdoe o trocadilho), um processador pode simplesmente executar um comando, ele não tem o conceito de fazer duas coisas ao mesmo tempo. O sistema operacional simula isso alocando fatias de tempo para diferentes threads.

Agora, se você introduzir vários núcleos/processadores na mistura, então as coisas podem realmente acontecer ao mesmo tempo. O sistema operacional pode alocar tempo para uma thread no primeiro processador, depois alocar o mesmo bloco de tempo para outra thread em um processador diferente. Tudo isso é sobre permitir que o sistema operacional gerencie a conclusão da sua tarefa enquanto você pode continuar no seu código e fazer outras coisas.

A programação assíncrona é um tema complicado devido à semântica de como as coisas se unem quando você pode fazê-las ao mesmo tempo. Há inúmeros artigos e livros sobre o assunto; dê uma olhada!

Comentários (18)

Execução síncrona significa que a execução acontece em uma única série. A->B->C->D. Se você está chamando essas rotinas, A irá executar, depois terminar, depois B irá iniciar, depois terminar, depois C irá iniciar, etc.

Com Execução assíncrona, você começa uma rotina, e deixa-a correr em segundo plano enquanto você começa a sua próxima, depois, em algum momento, diz "espere que isto termine". É mais como:

Iniciar A->B->C->D->``*Espere* porA` para terminar

A vantagem é que você pode executar B, C, e ou D enquanto A ainda está rodando (em segundo plano, em um tópico separado), para que você possa aproveitar melhor seus recursos e ter menos "pendências" ou "esperas".

Comentários (2)

Dizer simplesmente execução assíncrona é fazer coisas em segundo plano.

Por exemplo, se você quiser baixar um arquivo da Internet você pode usar uma função síncrona para fazer isso, mas ela irá bloquear sua thread até que o arquivo termine de baixar. Isto pode fazer com que a sua aplicação não responda a qualquer entrada do utilizador.

Em vez disso, você poderia baixar o arquivo em segundo plano usando o método assíncrono. Neste caso, a função de download retorna imediatamente e a execução do programa continua normalmente. Todas as operações de download são feitas em segundo plano e o seu programa será notificado quando estiver terminado.

Comentários (2)