Paralelismo implica simultaneidade, mas não o contrário, certo?


15

Costumo ler que paralelismo e concorrência são coisas diferentes. Muitas vezes, os respondentes / comentadores chegam a escrever que são duas coisas completamente diferentes. No entanto, na minha opinião, eles estão relacionados, mas eu gostaria de alguns esclarecimentos sobre isso.

Por exemplo, se eu estou em uma CPU multi-core e conseguem dividir o cálculo em x menor computação (digamos usando fork / join) cada um executando em seu próprio segmento, eu vou ter um programa que é computação paralela fazer (porque supostamente a qualquer momento várias threads serão executadas em vários núcleos) e sendo simultâneas, certo?

Embora se eu esteja simplesmente usando, digamos, Java e lidando com eventos da interface do usuário e repaints no Event Dispatch Thread e executando o único thread que eu mesmo criei, terei um programa simultâneo (EDT + GC thread + meu thread principal) etc.) mas não paralelo.

Gostaria de saber se estou acertando e se o paralelismo (em um sistema "único, mas com vários núcleos") sempre implica simultaneidade ou não?

Além disso, existem programas multiencadeados em execução na CPU com vários núcleos, mas onde os diferentes encadeamentos estão fazendo cálculos totalmente diferentes, considerados como "paralelismo"?


Respostas:


13

De acordo com a Wikipedia :

A computação paralela é uma forma de computação na qual muitos cálculos são realizados simultaneamente, operando com o princípio de que grandes problemas podem ser divididos em menores, que são resolvidos simultaneamente ("em paralelo").

Ou seja, o paralelismo sempre implica simultaneidade.

Além disso, existem programas multiencadeados em execução na CPU com vários núcleos, mas onde os diferentes encadeamentos estão fazendo cálculos totalmente diferentes, considerados como "paralelismo"?

Não. A essência do paralelismo é que um grande problema é dividido em menores, para que as partes menores possam ser resolvidas simultaneamente. As peças são mutuamente independentes (pelo menos até certo ponto), mas ainda fazem parte do problema maior, que agora está sendo resolvido em paralelo.

A essência da simultaneidade é que vários threads (ou processos ou computadores) estão fazendo algo simultaneamente , possivelmente (mas não necessariamente) interagindo de algumas maneiras. Wikipedia novamente :

A simultaneidade é uma propriedade de sistemas nos quais vários cálculos estão sendo executados simultaneamente e potencialmente interagindo entre si.


4
Ótimo post. Paralelismo é um subconjunto de Concorrência.

3
Desculpe, mas esta resposta está incorreta. Você pode definitivamente ter paralelismo sem simultaneidade (por exemplo, paralelismo em nível de bit) e, de fato, os dois são conceitos distintos. A simultaneidade é sobre a composição de unidades independentes de execuções, enquanto o paralelismo é sobre a execução simultânea de cálculos potencialmente associados.
Kai Sellgren

@KaiSellgren: Por favor, cite alguma fonte para apoiar sua declaração.
Joonas Pulakka

O primeiro wikiquote é simplesmente completamente errado. Felizmente, isso foi corrigido há algum tempo e agora afirma corretamente que o paralelismo não depende de simultaneidade.
Kai Sellgren

De fato, é o que a entrada do wiki diz atualmente ( é possível ter paralelismo sem simultaneidade (como paralelismo no nível de bit) ). Mas eu não entendo nada disso; não é o paralelismo no nível de bits a coisa mais concorrente imaginável - mais operações são executadas com menos instruções; então, algumas dessas operações são executadas na mesma instrução, ou seja, simultaneamente, ou seja, simultaneamente?
Joonas Pulakka

3

O código pode ser simultâneo, mas não paralelo.

Imagine vários threads em execução na máquina de núcleo único. Esta máquina de núcleo único processará apenas um encadeamento por vez, portanto, não haverá paralelismo de operações. Mas para cada thread, graças à maneira como o sistema operacional lida com vários threads, cada segmento precisa assumir que todos os outros threads estão em execução ao mesmo tempo.


0

Paralelismo significa simplesmente realizar muitas tarefas simultaneamente; por outro lado, a simultaneidade é a capacidade do kernel de executar muitas tarefas alternando constantemente entre muitos processos.

Para alcançar o paralelismo, é importante que o sistema tenha muitos núcleos somente para que o paralelismo possa ser alcançado com eficiência. E há muito impacto no desempenho e muita sobrecarga é incorrida se o paralelismo for tentado em uma máquina de núcleo único.

Por exemplo, o sistema anterior tinha apenas um núcleo e os agendadores de CPU dariam uma ilusão de paralelismo alternando constantemente entre processos, permitindo que cada processo progredisse.

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.