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?
multithreading
asynchronous
concurrency
GurdeepS
fonte
fonte
Respostas:
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.
fonte
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.
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
Paralelismo
Métodos assíncronos
fonte
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.
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.
fonte
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.
fonte
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.
fonte
De http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html
fonte
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;)
fonte
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.
fonte
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.
fonte
"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).
fonte
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
fonte
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.
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.
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
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, enquantotextBox.Dispatcher.Invoke
está resolvendo um problema de simultaneidade:fonte
Vou tornar breve e interessante compreender esses conceitos.
Simultâneo x Paralelo - as tarefas de execução são executadas.
Síncrono vs. Assíncrono - Modelos de programação.
fonte