Existe uma confusão muito comum na programação moderna:
Concorrência e paralelismo não são a mesma coisa, elas podem até parecer, mas não são
No nível mais baixo — no hardware — são coisas completamente diferentes e entender essa diferença muda a forma como você escreve código.
Concorrência: alternância organizada
Concorrência é quando múltiplas tarefas progridem ao longo do tempo, mas não necessariamente ao mesmo tempo.
Um único núcleo de CPU consegue fazer concorrência.
Ele faz isso alternando entre tarefas muito rapidamente.
Funciona assim:
Executa tarefa A por alguns microssegundos
Interrompe
Executa tarefa B
Interrompe
Volta para A
Isso cria a ilusão de simultaneidade.
Event loop do JavaScript faz isso.
Async/await em muitas linguagens faz isso.
Mesmo sistemas com uma única thread conseguem fazer isso.
Concorrência é sobre estrutura do programa e NÃO sobre hardware.
Paralelismo: execução física simultânea
Paralelismo é quando duas (ou mais) instruções estão sendo executadas literalmente ao mesmo tempo.
Isso exige:
Múltiplos núcleos OU múltiplas unidades de execução
Se dois núcleos estão executando código ao mesmo tempo, isso é paralelismo real.
Não é alternância! É simultaneidade física!
Um exemplo mental simples
Imagine dois cozinheiros.
Concorrência
Um cozinheiro sozinho:
corta cebola
mexe a panela
volta para cortar tomate
verifica o forno
Ele alterna tarefas.
Paralelismo
Dois cozinheiros:
um corta cebola
outro mexe a panela
Ao mesmo tempo.
Por que isso importa?
Porque muitas vezes achamos que estamos usando “paralelismo”, mas estamos apenas usando concorrência.
Exemplo clássico:
Node.js é concorrente
Nem sempre é paralelo
Outra situação:
Algumas linguagens possuem mecanismos que limitam execução paralela de código em múltiplas threads (como o GIL em algumas implementações).
Nesses casos, você pode ter concorrência, mas não paralelismo real.
Concorrência resolve organização
Paralelismo resolve performance
Concorrência é excelente para:
I/O
servidores
múltiplas requisições
manter o sistema responsivo
Paralelismo é excelente para:
processamento pesado
cálculo numérico
renderização
compressão
tarefas CPU-bound
Misturar os dois conceitos gera decisões erradas de arquitetura.
O que o hardware realmente faz
No fim das contas:
Concorrência é uma estratégia de agendamento.
Paralelismo é uma característica física da máquina.
Você pode escrever código concorrente em uma máquina de um núcleo.
Você não pode ter paralelismo real sem múltiplos recursos físicos.
Essa distinção parece simples.
Mas é uma das ideias que separa quem usa threads de quem entende threads.
Concorrência é sobre dividir o tempo.
Paralelismo é sobre dividir o hardware.