Processos, paralelismo e concorrência
Tags: beginners, productivity, programming
Published: 2024-03-30 22:11:42


Atualmente a demanda por sistemas eficientes e escaláveis é cada vez mais alta, com isto, paradigmas como processamento paralelo e concorrente ganharam muito mais visibilidade como pilares fundamentais. A grande ideia por trás destes paradigmas é otimizar a utilização de recursos computacionais, maximizando a eficiência dos sistemas. Hoje eu vou falar um pouco sobre conceitos, diferenças e aplicações de processamento paralelo e concorrente. 


## Processos e Threads

#### O que é um processo? 
Processo é uma entidade ativa dentro de um sistema operacional que executa uma tarefa especifica. Veja os processos como instancias de um programa em execução.

Cada processo é isolado dos outros o que significa que eles não podem interagir com outros processos, acessando memoria ou espaço uns dos outros, mas podem conversar entre si através de pipes, sockets ou sinais. 

#### O que é uma thread?
Threads ou linhas de execução? São unidades de execução em um software, elas são sequencias de instruções que podem ser executadas por um processador. Em sistemas que suportam o multi threading, cada thread representa um fluxo de controle separado dentro de um processo que aguarda por 

As threads podem ser usadas pra realizar tarefas simultâneas em um software, aproveitando os recursos do processador e melhorando a capacidade de resposta do sistema. Por exemplo, em um software de processamento de texto, uma thread pode ser ser responsável por lidar com a entrada do usuário enquanto outra está formatando texto em segundo plano. 

##### Por que usar threads?
- Threads simplificam o uso de multi-tarefas em projetos com várias entidades independentes.
- Threads tem vantagens em sistemas com múltiplos processadores.
- Threads ajudam na performance em 'segundo plano' e processos assíncronos 
## Processamento paralelo.

Basicamente o processamento paralelo é a execução simultânea de várias tarefas. (É isso, já pode ir pro próximo sub tópico. Brincadeira)
A ideia é dividir as tarefas em partes menores pra poderem ser executadas de forma independente, a abordagem visa explorar o potencial dos sistemas que comumente possuem limites de processamento.

Por exemplo processamento paralelo é comumente usado para renderização de gráficos e animações e processamentos de dados em grandes conjuntos, onde é necessário que os dados sejam divididos em partes menores para então serem processados simultaneamente por vários nós de computação em um [cluster](https://pt.wikipedia.org/wiki/Cluster)



### Aplicações e tendências 

##### Balanceamento de carga
Balanceamento de carga é uma técnica onde a ideia é distribuir as tarefas entre os recursos de processamento, como [CPUs](https://pt.wikipedia.org/wiki/Unidade_central_de_processamento) e [GPUs](https://pt.wikipedia.org/wiki/Unidade_de_processamento_gr%C3%A1fico). O objetivo é evitar sobrecargas em alguns recursos enquanto outros estão ociosos para maximizar a eficiência do sistema. 

## Processamento concorrente

O processamento concorrente refere-se à execução coordenada de múltiplas tarefas, permitindo que diferentes partes de um sistema avancem simultaneamente. Ao contrário do paralelismo, que se concentra na execução efetiva de múltiplas tarefas ao mesmo tempo, a concorrência trata mais da estruturação e organização das tarefas.

Já o processamento concorrente é comumente usado em servidores web e sistemas de bancos de dados, onde é necessário que acessar e modificar dados, garantindo que várias partes do sistema possam operar de forma independente e eficiente

## Diferenças e Complementaridade

Embora o processamento paralelo e concorrente tenham abordagens distintas, eles frequentemente se complementam na implementação de sistemas modernos. Enquanto o processamento paralelo busca otimizar a utilização de recursos computacionais, permitindo a execução simultânea de tarefas intensivas, o processamento concorrente lida com a estruturação e coordenação de múltiplas atividades, garantindo a eficiência e a responsividade dos sistemas.

## Conclusão

Embora o processamento paralelo e concorrente tenham abordagens diferentes, eles se complementam na implementação de sistemas modernos. Enquanto o processamento paralelo busca otimizar a utilização de tarefas intensivas, o processamento concorrente lida com a estruturação e coordenação de múltiplas atividades, garantindo a eficiência e a responsividade dos sistemas.