O que é Paralelismo? Fazer muitas coisas simultaneamente
Paralelismo é executar múltiplas computações no mesmo instante, tipicamente espalhando o trabalho por vários cores de CPU ou máquinas.
Paralelismo é o ato de literalmente fazer muitas coisas ao mesmo tempo. Onde concorrência é sobre estruturar tarefas sobrepostas, paralelismo é sobre rodá-las simultaneamente em hardware real: múltiplos cores, múltiplas máquinas ou ambos. É como você faz uma grande computação terminar mais rápido, dividindo-a entre workers.
O que o paralelismo exige
Paralelismo verdadeiro precisa de hardware que possa executar mais de um fluxo de instruções ao mesmo tempo: múltiplos cores de CPU, múltiplas máquinas ou uma GPU. Sem isso, as tarefas só podem ser concorrentes (intercaladas), não genuinamente simultâneas.
Paralelismo vs concorrência
Concorrência é sobre estrutura (lidar com muitas tarefas); paralelismo é sobre execução (rodá-las ao mesmo tempo). Código concorrente pode rodar em paralelo dados cores suficientes, mas não precisa. Paralelismo é uma forma de executar trabalho concorrente rápido.
Tipos de paralelismo
- Data parallelism: aplicar a mesma operação a muitos itens de dados de uma vez.
- Task parallelism: rodar diferentes tarefas independentes simultaneamente.
- Paralelismo multi-core dentro de uma máquina.
- Paralelismo distribuído entre muitas máquinas.
Os limites de ir para o paralelo
Adicionar workers não escala para sempre. O overhead de coordenação, a contenção por recursos compartilhados e a parte inerentemente serial de um problema (a lei de Amdahl) limitam o speedup. Passado um ponto, mais paralelismo rende retornos decrescentes.
Um exemplo rápido
Dividir uma suíte de testes em quatro shards que rodam em quatro cores pode terminar em cerca de um quarto do tempo, desde que os shards estejam balanceados e não disputem os mesmos recursos.
Paralelismo no CI
Paralelizar builds e shards de teste é a principal alavanca para pipelines mais rápidos, mas precisa de cores. Em runners pequenos, o trabalho paralelo apenas disputa os mesmos poucos cores e mal acelera. Runners maiores (Latchkey) fornecem cores reais para que jobs paralelos de fato rodem simultaneamente.
Principais conclusões
- Paralelismo roda múltiplas computações no mesmo instante, precisando de hardware multi-core real.
- É execução, enquanto concorrência é estrutura; os dois são relacionados mas distintos.
- Os speedups são limitados pelo overhead de coordenação e pela parte serial do trabalho.