Fundamentos da Programação Concorrente e Paralela
Classificado em Computação
Escrito em em português com um tamanho de 3,91 KB
1. Objetivos da Programação Concorrente
A programação concorrente visa a otimização e eficiência de sistemas através de vários objetivos:
- Reduzir o tempo total de processamento: Ideal para múltiplos processadores.
- Aumentar a confiabilidade e disponibilidade: Útil em sistemas com processadores distribuídos.
- Obter especialização de serviços: Aplicado em sistemas operacionais e simuladores.
- Implementar aplicações distribuídas: Como sistemas de correio eletrônico.
2. O Que é Programação Concorrente?
Uma unidade concorrente é um componente de um programa que não exige execução sequencial, ou seja, pode ser executado antes, depois ou simultaneamente a outros componentes. O termo programação concorrente é usado de forma abrangente para designar tanto a programação paralela quanto a programação distribuída. A concorrência está relacionada com o fluxo de controle, indicando que existe mais de um fluxo de controle ativo em um programa.
3. Fluxo de Execução Sequencial
Na execução sequencial, o programa controla totalmente a ordem das operações. Suas características incluem:
- Comandos de controle de fluxo: Sequencial, condicional e iterativo.
- Requisição de execução de unidades: Pode ser explícita (chamada de métodos) ou implícita (ativação de exceções).
- Controle: O programa determina a ordem de execução.
4. Fluxo de Execução Concorrente
Na execução concorrente, o programa não controla a ordem de execução das tarefas. Suas características são:
- Cada tarefa é uma unidade de execução autônoma, como um thread.
- As tarefas podem ser totalmente independentes (ex: executar o mesmo método sobre dois objetos diferentes).
- As tarefas podem necessitar de comunicação entre si.
5. Níveis de Concorrência em Programas
- Nível de Instruções (SIMD - Single Instruction Multiple Data): Exemplo: processamento vetorial.
- Nível de Comandos (ações de programas): Exemplo: chamadas de procedimentos.
- Nível de Unidades (processos): Exemplo: procedimentos e funções.
6. Tipos de Execução Concorrente
Execução concorrente, por vezes chamada de execução paralela, não implica necessariamente em execução simultânea. Existem diferentes modelos:
- Pseudo-paralela: Execução em um único processador, alternando entre tarefas.
- Paralela: Execução em múltiplos processadores que compartilham uma memória comum.
- Distribuída: Execução em múltiplos processadores independentes, sem compartilhamento de memória.
Geralmente, o programa não possui controle sobre a ordem e o tempo de execução das unidades concorrentes.
7. Mecanismos para Unidades Concorrentes
A linguagem de programação (LP) deve oferecer recursos para:
- Controlar a execução das unidades concorrentes.
- Estabelecer prioridades e restrições temporais.
- Permitir a comunicação entre unidades.
Os processos podem ser centralizados (ambiente local) ou distribuídos (ambiente global), sendo a comunicação entre eles um desafio fundamental.
8. Considerações Importantes
- Interação entre unidades: Cooperação e competição.
- Controle de acesso a dados: Consistência e transações.
- Código atômico: Sincronismo.
- Controle de tempo de execução: Tratamento de exceções.