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.

Entradas relacionadas: