A instrução simultânea refere -se à capacidade de um sistema de computador de executar várias instruções ao mesmo tempo, ou pelo menos parece fazê -lo. É um conceito mais amplo do que o paralelismo, embora frequentemente usado de forma intercambiável. A principal diferença está na maneira como as instruções são tratadas:
* Paralelismo
: Executa explicitamente várias instruções * simultaneamente * usando várias unidades de processamento (como vários núcleos em uma CPU). Isso requer recursos de hardware dedicados.
*
Concorrência: Lida com a execução de várias instruções que * se sobrepõem * no tempo, mas não necessariamente no mesmo instante. Isso pode ser alcançado através de várias técnicas, incluindo:
*
multitarefa: Executando vários programas aparentemente ao mesmo tempo, alternando rapidamente entre eles. O processamento real ainda é seqüencial, mas a comutação é rápida o suficiente para dar a ilusão de simultaneidade.
*
Multithreading: Um único programa executando vários threads de instruções simultaneamente. Esses encadeamentos podem compartilhar recursos e um único núcleo pode alternar entre eles rapidamente (comutação de contexto).
*
Paralelismo no nível da instrução (ILP): A CPU reordenta e executa várias instruções simultaneamente em um único núcleo, alavancando pipelining e outras técnicas para melhorar o desempenho. Isso acontece em um nível muito mais baixo do que a multitarefa ou multithreading.
*
SIMD (instrução única, múltiplos dados): Uma única instrução opera em vários pontos de dados simultaneamente, geralmente usados em processamento vetorial e cálculos de GPU.
Em essência, a concorrência é um termo mais abrangente. O paralelismo é um * tipo * de simultaneidade, onde as instruções são executadas simultaneamente em unidades de hardware separadas. A simultaneidade também pode ser alcançada sem paralelismo verdadeiro, apenas através de programação inteligente e gerenciamento de recursos. O objetivo de ambos é melhorar o desempenho geral do sistema e a taxa de transferência, sobrepondo ou executando simultaneamente diferentes partes de um programa ou vários programas.