Post on 21-Jan-2016
description
Programação Concorrente
Eduardo Nicola F. Zagari
Principles of Concurrent and Distributed Programming - Ben-Ari
O que é Programação Concorrente
• Introdução
• E/S e Computação sobrepostas
• Multiprogramação
• Multitarefa
Introdução
• Programa “ordinário”: instruções executadas seqüencialmente
• Programa Concorrente: conjunto de programas seqüenciais (processos) executados em um pseudo-parelelismo
• Pseudo-parelelismo: paralelismo abstrato– não necessariamente vários processadores
E/S e Computação Sobrepostas
• Digitação de 60 palavras por minuto
• Impressão de 200 caracteres por segundo
• Processamento de 1 caracter a cada 10 s.
• Uso da abstração da programação concorrente
E/S e Computação Sobrepostas
Principal
E/S
Início E/S Fim E/S
Aguarda E/S
Tempo
Multiprogramação
• Programa típico:Loop
Read;
Process;
Write;
End-loop.
• Generalização:E/S de um processo é feita
sobreposta com a computação de outro.
• Multiprogramação:execução concorrente de
vários processos independentes em um processador
Multiprogramação
• Generalização adicional: Compartilhamento de tempo (time-sharing)– compartilhamento do processador entre
computações.
• Escalonador
• Sistemas de tempo compartilhado: bons tempos de resposta, mesmo em sistemas com grandes processos
Multiprogramação
• Multiprogramação em computadores pessoais– processos concorrentes usando diferentes
recursos
• Enfim: abstração de programação concorrente é aplicável à multiprogramação
Multitarefa
• Generalização do conceito de multiprogramação:– solução de um problema pela decomposição em
vários processos concorrentes
• Problema: o tamanho do grão– tarefas menores, maior potencial de
concorrência, mas maior o overhead
Multitarefa
• Concorrência de grão pequenoE := (A*B) + (C*D)
ou
for I in 1..100 loop
A(I) := B(I) + C(I)*D(I);
end loop;
• Depende muito da arquitetura
Multitarefa
• Concorrência em programas independentes– Ex.: pipes no Unix
sort | remove_duplicates | format | print
Multitarefa• Concorrência de grão grande
– usada em sistemas de tempo-real embarcados– usada para melhor desempenho em sistemas
multiprocessados e multicomputadores.– Ex.: processador de texto
• Ler caracteres e colecionar palavras• Colecionar palavras para preencher uma linha• Hifenizar, se necessário• Introduzir espaços para justificar a linha com a margem direita
• Colecionar linhas o bastante para encher uma página• Imprimir a página
Multitarefa
• Algoritmo Mergesortprocedure Merge_Sort is
A: array(1..N) of Integer;
procedure Sort(Low, High: Integer);
procedure Merge;
begin
Sort( 1, N/2);
Sort(N/2 + 1, N);
Merge;
end;