130 likes | 244 Views
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
E N D
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 E/S Aguarda E/S Principal Início E/S Fim E/S Tempo
Multiprogramação • Generalização: E/S de um processo é feita sobreposta com a computação de outro. • Programa típico: Loop Read; Process; Write; End-loop. • 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 pequeno E := (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 Mergesort procedure 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;