Qual é a diferença entre simultaneidade, paralelismo e métodos assíncronos?


177

A simultaneidade está executando duas tarefas em paralelo em threads separados. No entanto, métodos assíncronos são executados em paralelo, mas no mesmo segmento. Como isso é alcançado? Além disso, e o paralelismo?

Quais são as diferenças entre esses três conceitos?


8
O termo "assíncrono" pode significar muitas coisas diferentes. Esses termos estão relacionados, mas eles não descrevem conjuntos de coisas disjuntos. Os significados se sobrepõem e variam de acordo com a situação.
Pointy

2
Portanto, a primeira simultaneidade está executando dois ou mais processos ao mesmo tempo. Com isso fora do caminho, ser concorrente não é ser paralelo. Processos paralelos requerem dois ou mais núcleos, enquanto processos simultâneos podem compartilhar um único núcleo no tempo.
Rick O'Shea

Respostas:


139

Concorrente e paralelo são efetivamente o mesmo princípio que você supõe corretamente, ambos estão relacionados a tarefas sendo executadas simultaneamente, embora eu diria que tarefas paralelas devem ser verdadeiramente multitarefas, executadas "ao mesmo tempo", enquanto concorrentes podem significar que as tarefas estão compartilhando o thread de execução enquanto ainda parece estar sendo executado em paralelo.

Os métodos assíncronos não estão diretamente relacionados aos dois conceitos anteriores, a assincronia é usada para apresentar a impressão de tarefas simultâneas ou paralelas, mas efetivamente uma chamada de método assíncrona é normalmente usada para um processo que precisa trabalhar longe do aplicativo atual e não quero esperar e bloquear nosso aplicativo aguardando a resposta.

Por exemplo, obter dados de um banco de dados pode demorar, mas não queremos bloquear nossa interface do usuário aguardando os dados. A chamada assíncrona usa uma referência de retorno de chamada e retorna a execução de volta ao seu código assim que a solicitação é feita no sistema remoto. Sua interface do usuário pode continuar a responder ao usuário enquanto o sistema remoto faz o processamento necessário, uma vez que retorna os dados ao seu método de retorno de chamada, esse método pode atualizar a interface do usuário (ou transferir essa atualização) conforme apropriado.

Da perspectiva do usuário, parece multitarefa, mas pode não ser.


EDITAR

Provavelmente vale a pena acrescentar que, em muitas implementações, uma chamada de método assíncrona fará com que um encadeamento seja ativado, mas isso não é essencial, depende realmente da operação que está sendo executada e como a resposta pode ser notificada de volta ao sistema.


34
Eu diria que você tem paralelismo e concorrência misturados no seu primeiro parágrafo. Simultaneidade refere-se ao gerenciamento de vários encadeamentos de execução, em que o paralelismo é mais específico, e vários encadeamentos de execução são executados simultaneamente. Concorrência é o termo mais amplo que pode abranger paralelismo.
Mark H

7
Embora as duas palavras sejam muito semelhantes e possam ser confusas (e geralmente são), elas têm definições diferentes: Simultâneo = Existente, acontecendo ou feito ao mesmo tempo. Paralelo = relativo ao desempenho aparente ou real de mais de uma operação por vez, pelo mesmo dispositivo ou por dispositivos diferentes. Como você pode ver paralelo, não significa necessariamente simultâneo, mas pode parecer apenas simultâneo. No final do dia, as palavras são frequentemente usadas de forma intercambiável e com n dev é uma sala que você provavelmente terá n + 1 definições;)
Lazarus

3
@Mehrdad Se você pretende basear suas definições de palavras do dicionário no uso delas em materiais de marketing, acho que você provavelmente se encontrará em uma desvantagem.
Lázaro

6
Errado. No contexto da programação, simultaneidade é a capacidade do seu código ser "composto" em bits de lógica que podem ser executados ao mesmo tempo. O paralelismo (quando combinado com a simultaneidade) está pegando o código e executando-o em uma máquina de 100 núcleos.
23814 Frank Radocaj

2
@FrankRadocaj está certo. Concorrente significa que o programa pode ser dividido em unidades (unidades sendo essencialmente threads) que podem ser executadas em qualquer ordem e ter um resultado determinado. Paralelo significa que essas unidades / threads estão sendo executadas literalmente ao mesmo tempo em vários processadores.

89

Em resumo,

Simultaneidade significa várias tarefas que são iniciadas, executadas e concluídas em períodos de sobreposição, sem ordem específica. Paralelismo é quando várias tarefas OU várias partes de uma tarefa única literalmente são executadas ao mesmo tempo, por exemplo, em um processador com vários núcleos.

Lembre-se de que simultaneidade e paralelismo NÃO são a mesma coisa.

Diferenças entre concorrência versus paralelismo

Agora vamos listar diferenças notáveis ​​entre simultaneidade e paralelismo.

A simultaneidade ocorre quando duas tarefas podem iniciar, executar e concluir em períodos de sobreposição. Paralelismo é quando as tarefas literalmente são executadas ao mesmo tempo, por exemplo. em um processador multi-core.

Concorrência é a composição de processos de execução independente, enquanto paralelismo é a execução simultânea de cálculos (possivelmente relacionados).

Simultaneidade é lidar com muitas coisas ao mesmo tempo. Paralelismo é fazer muitas coisas ao mesmo tempo.

Um aplicativo pode ser simultâneo - mas não paralelo, o que significa que processa mais de uma tarefa ao mesmo tempo, mas não há duas tarefas sendo executadas ao mesmo tempo instantaneamente.

Um aplicativo pode ser paralelo - mas não simultâneo, o que significa que processa várias subtarefas de uma tarefa na CPU com vários núcleos ao mesmo tempo.

Um aplicativo não pode ser paralelo - nem simultâneo, o que significa que processa todas as tarefas uma de cada vez, sequencialmente.

Um aplicativo pode ser paralelo - e simultâneo, o que significa que processa várias tarefas simultaneamente na CPU com vários núcleos ao mesmo tempo.

Concorrência

A simultaneidade é essencialmente aplicável quando falamos de no mínimo duas tarefas ou mais. Quando um aplicativo é capaz de executar duas tarefas praticamente ao mesmo tempo, chamamos de aplicativo simultâneo. Embora aqui as tarefas executadas se pareçam simultaneamente, mas essencialmente elas NÃO PODEM. Eles aproveitam o recurso de divisão de tempo da CPU do sistema operacional, onde cada tarefa executa parte de sua tarefa e depois passa para o estado de espera. Quando a primeira tarefa está no estado de espera, a CPU é atribuída à segunda tarefa para concluir sua parte.

O sistema operacional baseado na prioridade das tarefas, portanto, atribui CPU e outros recursos de computação, por exemplo, memória; passo a passo para todas as tarefas e dê a elas a chance de concluir. Para o usuário final, parece que todas as tarefas estão sendo executadas em paralelo. Isso é chamado simultaneidade.

Paralelismo

O paralelismo não requer duas tarefas para existir. Ele literalmente executa fisicamente partes de tarefas OU várias tarefas, ao mesmo tempo usando a infraestrutura de vários núcleos da CPU, atribuindo um núcleo a cada tarefa ou subtarefa.

O paralelismo requer hardware com várias unidades de processamento, essencialmente. Na CPU de núcleo único, você pode obter simultaneidade, mas NÃO paralelismo.

Métodos assíncronos

Isso não está relacionado à simultaneidade e ao paralelismo, a assincronia é usada para apresentar a impressão de tarefas simultâneas ou paralelas, mas efetivamente uma chamada de método assíncrona é normalmente usada para um processo que precisa trabalhar longe do aplicativo atual e não queremos aguarde e bloqueie nosso aplicativo aguardando a resposta.


2
Muito útil. Obrigado
Neha

Ainda estou confuso sobre Async vs simultaneidade. Eu vi a frase "executando tarefas de forma assíncrona" e "executando tarefas simultaneamente" usada. Executar tarefas assíncronas e executar tarefas simultaneamente parecem significar a mesma coisa?
Moondra 24/03/19

1
A tarefa @Moondra Async é executada em um único thread, nada relacionado ao multithreading. A tarefa assíncrona envia uma tarefa para um processo externo fora do seu aplicativo ... ou seja, banco de dados, leitor de arquivos ... esses são processos de E / S; em seguida, um retorno de chamada é adicionado ao processo para executar uma ação quando o processo de E / S estiver concluído. o que não tenho certeza é que existem alguns recursos "assíncronos" em alguma linguagem de programação que cria um novo thread separado quando você chama uma tarefa assíncrona; ouvi dizer que o c # é um deles, mas não tenho certeza disso
Tobi Owolawi

56

A simultaneidade ocorre quando a execução de várias tarefas é intercalada, em vez de cada tarefa ser executada sequencialmente uma após a outra.

Paralelismo é quando essas tarefas são realmente executadas em paralelo.

insira a descrição da imagem aqui


A assincronia é um conceito separado (embora relacionado em alguns contextos). Refere-se ao fato de que um evento pode estar acontecendo em um horário diferente (não em sincronia) para outro evento. Os diagramas abaixo ilustram qual é a diferença entre uma execução síncrona e assíncrona, em que os atores podem corresponder a diferentes threads, processos ou até servidores.

insira a descrição da imagem aqui

insira a descrição da imagem aqui


6
Ilustração simples e eficaz.
contactmatt

1
simultaneidade é o mesmo que assincronia?
nºs

1
Esses 2 conceitos são muito próximos, de fato, mas não são os mesmos. Na prática, a assincronia está mais relacionada à interação entre as ações (digamos A e B), onde uma (B) é acionada pela outra (A) e se a segunda espera a primeira para ser concluída. Concorrência é um termo mais geral para ações que também podem não estar relacionadas entre si e se são executadas em sequência ou se suas execuções são intercaladas.
Dimos

1
Então assincronia é principalmente sobre bloqueio e não bloqueio
Daniel

15

Todo mundo está tendo problemas para associar assíncrono a paralelismo ou simultaneidade porque assíncrono não é um antônimo de paralelo ou simultâneo. É um antônimo de Synchronous. O que apenas indica se algo, neste caso, threads, será sincronizado com outra coisa, neste caso, outro thread.


12

Existem vários cenários em que a simultaneidade pode ocorrer:

Assincronia - Isso significa que o seu programa executa operações sem bloqueio. Por exemplo, ele pode iniciar uma solicitação de um recurso remoto via HTTP e, em seguida, executar outra tarefa enquanto aguarda a resposta ser recebida. É um pouco como quando você envia um e-mail e continua sua vida sem esperar por uma resposta.

Paralelismo - Isso significa que seu programa utiliza o hardware de máquinas com vários núcleos para executar tarefas ao mesmo tempo, dividindo o trabalho em tarefas, cada uma das quais executada em um núcleo separado. É como cantar no chuveiro: você está realmente fazendo duas coisas exatamente ao mesmo tempo.

Multithreading - Esta é uma implementação de software que permite que diferentes threads sejam executados simultaneamente. Um programa multithread parece estar fazendo várias coisas ao mesmo tempo, mesmo quando está sendo executado em uma máquina de núcleo único. É um pouco como conversar com pessoas diferentes através de várias janelas de mensagens instantâneas; embora você esteja realmente alternando, o resultado líquido é que você está tendo várias conversas ao mesmo tempo.


Essas são realmente boas analogias! Obrigado. Seria justo dizer que a simultaneidade pode ser definida com sua definição de multithreading? Então simultaneidade = multithreading em um núcleo único que parece estar acontecendo ao mesmo tempo, mas está realmente mudando de um lado para o outro muito rapidamente?
wongz 7/06

3

Concorrência

Simultaneidade significa que um aplicativo está progredindo em mais de uma tarefa ao mesmo tempo (simultaneamente). Bem, se o computador tiver apenas uma CPU, o aplicativo poderá não progredir em mais de uma tarefa exatamente ao mesmo tempo, mas mais de uma tarefa será processada por vez dentro do aplicativo. Não conclui completamente uma tarefa antes de começar a próxima.

Paralelismo

Paralelismo significa que um aplicativo divide suas tarefas em subtarefas menores que podem ser processadas em paralelo, por exemplo, em várias CPUs ao mesmo tempo.

Concorrência x paralelismo em detalhes

Como você pode ver, a simultaneidade está relacionada a como um aplicativo lida com várias tarefas nas quais trabalha. Um aplicativo pode processar uma tarefa de cada vez (sequencialmente) ou trabalhar em várias tarefas ao mesmo tempo (simultaneamente).

Paralelismo, por outro lado, está relacionado a como um aplicativo lida com cada tarefa individual. Um aplicativo pode processar a tarefa em série do início ao fim ou dividir a tarefa em subtarefas que podem ser concluídas em paralelo.

Como você pode ver, um aplicativo pode ser simultâneo, mas não paralelo. Isso significa que ele processa mais de uma tarefa ao mesmo tempo, mas as tarefas não são divididas em subtarefas.

Um aplicativo também pode ser paralelo, mas não simultâneo. Isso significa que o aplicativo funciona apenas em uma tarefa por vez, e essa tarefa é dividida em subtarefas que podem ser processadas em paralelo.

Além disso, um aplicativo não pode ser simultâneo nem paralelo. Isso significa que ele funciona em apenas uma tarefa por vez, e a tarefa nunca é dividida em subtarefas para execução paralela.

Finalmente, um aplicativo também pode ser simultâneo e paralelo, pois trabalha em várias tarefas ao mesmo tempo e também divide cada tarefa em subtarefas para execução paralela. No entanto, alguns dos benefícios da simultaneidade e do paralelismo podem ser perdidos nesse cenário, pois as CPUs no computador já são mantidas razoavelmente ocupadas com a simultaneidade ou o paralelismo. Combiná-lo pode levar a apenas um pequeno ganho de desempenho ou até mesmo perda de desempenho. Certifique-se de analisar e medir antes de adotar um modelo paralelo simultâneo às cegas.

De http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html


3

Paralelo:É um termo amplo que significa que dois pedaços de código executam isso "ao mesmo tempo". Não importa se é paralelismo "real" ou se é falsificado por algum padrão de design inteligente. O ponto é que você pode iniciar as "tarefas" ao mesmo tempo e controlá-las separadamente (com mutex e todos os truques apropriados). Mas geralmente você prefere usar a palavra "paralelo" apenas para paralelismo "verdadeiro", como em: você faz isso através de multitarefa não cooperativa (seja através de núcleos de CPU / GPU, ou apenas no nível do software, permitindo que o SO o gerencie) em um nível muito baixo). As pessoas relutam em dizer "paralelo" apenas para códigos sequenciais complicados que simulam paralelismo, como você encontraria no javascript da janela do navegador, por exemplo. Daí a razão pela qual as pessoas neste segmento dizem que "assíncrono não tem nada a ver com paralelismo". Bem, sim, mas não os confunda.

Concorrente: não pode haver simultaneidade sem paralelismo (simulado ou real, como expliquei acima), mas esse termo se concentra especificamente no fato de que os dois sistemas tentarão acessar o mesmo recurso ao mesmo tempo em algum momento. Ele enfatiza o fato de que você terá que lidar com isso.

Assíncrono : todo mundo está certo ao dizer que assíncrono não está relacionado ao paralelismo, mas abre o caminho para ele (o ônus é de você fazer as coisas paralelas ou não - continue lendo).

"Assíncrono" refere-se a uma representação do paralelismo que formaliza as três coisas básicas geralmente envolvidas no paralelismo: 1) define a inicialização da tarefa (digamos, quando é iniciada e quais parâmetros obtém), 2) o que deve ser feito após a conclusão e 3) O que o código deve continuar fazendo no meio.

Mas ainda é apenas sintaxe (geralmente é representada como métodos de retorno de chamada). Nos bastidores, o sistema subjacente pode simplesmente decidir que essas chamadas "tarefas" são apenas fragmentos de código a serem acumulados até concluir o código que está sendo executado no momento. E então os descompacta um a um e os executa sequencialmente. Ou não. Também pode criar um encadeamento por tarefa e executá-los em paralelo. Quem se importa? Essa parte não está incluída no conceito;)


2

Há um pouco de semântica para esclarecer aqui:

Simultaneidade ou paralelismo é uma questão de contenção de recursos , enquanto Assíncrono é sobre fluxo de controle .

Diferentes procedimentos (ou suas operações constituintes ) são denominados Assíncronos, quando não há implementação determinística da ordem de processamento ; em outras palavras, há uma probabilidade de que qualquer um deles possa ser processado a qualquer momento T. Por definição, vários processadores (por exemplo, CPUs ou Pessoas) possibilitam que vários deles sejam processados ​​ao mesmo tempo; em um único processador, seu processamento é intercalado (por exemplo, Threads).

Procedimentos ou operações assíncronas são denominadas Concorrentes, quando compartilham recursos ; A simultaneidade é a possibilidade definida de contenção a qualquer momento. T. O paralelismo é trivialmente garantido quando nenhum recurso é compartilhado (por exemplo, processador e armazenamento diferentes); caso contrário, o controle de concorrência deve ser tratado.

Portanto, um procedimento ou operação assíncrona pode ser processada em paralelo ou simultaneamente com outras pessoas.


2

Concorrência significa executar várias tarefas ao mesmo tempo, mas não necessariamente simultaneamente. Quando você precisa executar mais de uma tarefa, mas possui um único recurso, optamos pela simultaneidade. No ambiente de núcleo único, a simultaneidade é alcançada pela troca de contexto.

Paralelismo é como executar mais de uma tarefa simultaneamente, como você pode cantar e tomar banho juntos. Agora você está executando a tarefa em paralelo.

Assíncrono é algo relacionado à execução de encadeamento no modelo assíncrono quando uma tarefa é executada. Você pode alternar para uma tarefa diferente sem aguardar a conclusão da anterior.

A programação assíncrona nos ajuda a obter simultaneidade. A programação assíncrona em um ambiente multithread é uma maneira de obter paralelismo.


2

"Sync e async são modelos de programação. Simultaneamente e paralelamente, são as maneiras pelas quais as tarefas são executadas ...". Fonte: https://medium.com/better-programming/sync-vs-async-vs-concurrent-vs-parallel-5754cdb60f66

Em outras palavras, sync e async descrevem como o programa é executado ao fazer uma chamada de função (esperará ou continuará executando?), Enquanto simultâneo e paralelo descrevem como uma função (uma tarefa) será executada (simultânea = possivelmente executada em paralelo = efetivamente executado ao mesmo tempo).


o meio não é uma fonte, é um artigo de outra pessoa falando sobre seu (des) entendimento de um assunto, não o torna uma autoridade.
Moha o todo-poderoso camelo

1
É uma citação, portanto a fonte. A maioria das respostas aqui não são escritas pelas autoridades em nenhum campo e a explicação que o autor deu é boa o suficiente.
Pedro Boechat

No stackoverflow, você tem pelo menos um sistema de votação e é uma comunidade de profissionais. Qualquer um pode escrever qualquer coisa no meio. Não é uma comparação justa entre os dois.
Moha o todo-poderoso camelo

1
Qualquer um pode escrever qualquer coisa aqui também, não sei por que você está escolhendo no Medium. De qualquer forma, sou um programador profissional e apoio esse entendimento. E acho elegante porque é relativamente curto.
Pedro Boechat

O problema não é que o Medium seja uma fonte ruim, o problema é que uma resposta que apenas vincula a uma página externa não é uma resposta. Você poderia melhorar bastante essa resposta se elaborasse a parte citada ou resumisse o conteúdo do artigo, em vez de apenas vincular a ela.
David Schwartz

1

CONCURRÊNCIA VS PARALELISMO: simultaneidade em um ponto no tempo, apenas uma tarefa pode ser executada. exemplo: paralelismo do processador da CPU única em um ponto, podemos executar várias tarefas. exemplo: processador dual core ou multi core


1

Aqui eu explico com alguns exemplos


Paralelismo

Uma GPU usa processamento paralelo para processar o mesmo bloco de código ( kernel AKA ) em milhares de encadeamentos físicos e lógicos. Idealmente, o processo inicia e termina para todos os threads ao mesmo tempo. Um único núcleo de CPU sem hyperthreading não pode executar processamento paralelo.

Nota: Eu disse idealmente, porque quando você executa um kernel com tamanho de 7M em um hardware com threads de 6M, ele precisa executar duas vezes executando o mesmo código em todos os threads de 6M em paralelo enquanto consome todos os threads de 6M de cada vez.

  • um kernel (um pedaço de código) é executado em vários processadores
  • simultaneamente
  • com uma única sequência de execução (um kernel deve fazer a mesma coisa em todos os threads, portanto, "ramificação" ou "se" são evitados porque eles consumirão os recursos drasticamente, criando muitos NOPs (sem operações) para sincronizar todos os threads)
  • essencialmente aumenta a velocidade drasticamente
  • limita drasticamente o que você pode fazer
  • depende muito do hardware

Nota: O paralelismo não se limita à GPU.


Concorrência

Um serviço da Web recebe muitas solicitações pequenas em tempo real e precisa lidar com cada uma dessas solicitações de maneira diferente, a qualquer momento e independente de outras solicitações ou trabalhos internos. No entanto, você deseja que o serviço da Web esteja sempre funcionando sem danificar o estado dos dados ou a integridade do sistema.

Imagine um usuário atualizando um registro e outro excluindo o mesmo registro ao mesmo tempo.

  • muitas tarefas são executadas
  • em tempo real (ou sempre que houver uma solicitação)
  • com sequências de execução diferentes (ao contrário do kernel no processamento paralelo, tarefas simultâneas podem fazer coisas diferentes, é provável que você precise enfileirá-las ou priorizá-las)
  • essencialmente melhora o tempo médio de resposta porque a tarefa 2 não precisa esperar a tarefa 1 terminar
  • essencialmente sacrifica o tempo computacional porque muitas tarefas estão sendo executadas ao mesmo tempo e há recursos limitados
  • precisa gerenciar adequadamente os recursos compartilhados para que não ocorra conflitos ou corrompa os dados.

Nota : Essas solicitações geralmente consomem alguns recursos essenciais, como memória, conexão com o banco de dados ou largura de banda. No entanto, você deseja que o serviço da Web seja responsivo o tempo todo. Assíncrona é a chave para torná-lo responsivo , não simultâneo


Assíncrono

Um processo pesado (como uma operação de E / S) pode bloquear facilmente a GUI se for executado no encadeamento da GUI. Para garantir a capacidade de resposta da interface do usuário , um processo pesado pode ser executado de forma assíncrona. É melhor executar operações assíncronas semelhantes, uma de cada vez . por exemplo, várias operações vinculadas à IO podem ser significativamente mais lentas se executadas ao mesmo tempo, por isso é melhor enfileirá- las para começar

  • uma tarefa ou um lote de tarefas é executada em outro encadeamento
  • um tempo
  • se houver uma tarefa, não haverá sequência; então, você deve esperar que ela termine ou dispara e esquece
  • se é um lote de tarefas, você dispara e esquece tudo ao mesmo tempo, espera que tudo termine ou executa cada conclusão da tarefa para iniciar
  • reduz essencialmente o desempenho por causa das despesas gerais
  • fornece capacidade de resposta a outro thread (eficaz contra o bloqueio do thread da interface do usuário ou outros threads essenciais)

Nota: uma operação assíncrona que é executada simultaneamente (ou seja, mais de uma vez por vez) é uma operação simultânea.


Nota: A simultaneidade e a assíncrona geralmente são confundidas entre si. A simultaneidade refere-se a diferentes partes do sistema trabalhando juntas sem interferir umas com as outras (esses problemas geralmente são resolvidos com bloqueios, semáforos ou mutexes). Assíncrona é como você obtém capacidade de resposta (como o encadeamento).

* Nota: Assíncrona e Multithreading são frequentemente confundidas entre si. O código assíncrono não envolve necessariamente um novo thread. pode ser uma operação de hardware ou, como Stephan chama de operação pura, leia este

por exemplo, no código WPF + C # abaixo, await Task.Run(()=> HeavyMethod(txt))está resolvendo um problema de assincronia, enquanto textBox.Dispatcher.Invokeestá resolvendo um problema de simultaneidade:

private async void ButtonClick(object sender, RoutedEventArgs e)
{
    // run a method in another thread
    await Task.Run(()=> HeavyMethod(txt));

    // modify UI object in UI thread
    txt.Text = "done";
}

// This is a thread-safe method. You can run it in any thread
internal void HeavyMethod(TextBox textBox)
{
    while (stillWorking)
    {
        // use Dispatcher to safely invoke UI operations
        textBox.Dispatcher.Invoke(() =>
        {
            // UI operations outside of invoke will cause ThreadException
            textBox.Text += ".";
        });
    }
}

0

Vou tornar breve e interessante compreender esses conceitos.

Simultâneo x Paralelo - as tarefas de execução são executadas.

Tomemos um exemplo na vida real: há um desafio que exige que você coma um bolo enorme e cante uma música inteira. Você ganhará se for o mais rápido que canta a música inteira e termina o bolo. Portanto, a regra é que você cante e coma simultaneamente . Como você faz isso não pertence à regra. Você pode comer o bolo inteiro, cantar a música inteira ou comer meio bolo, cantar metade da música e fazer isso novamente etc.

Paralelismo é um tipo específico de simultaneidade em que as tarefas são realmente executadas simultaneamente. Na ciência da computação, o paralelismo só pode ser alcançado em ambientes multicore.

Síncrono vs. Assíncrono - Modelos de programação.

Em sincronia, você escreve o código como etapas executadas em ordem, de cima para baixo. Em um modelo de programação assíncrona, você escreve código como tarefas, que são executadas simultaneamente. Executar simultaneamente significa que todas as tarefas provavelmente são executadas ao mesmo tempo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.