Programação Concorrente - Introdução

  • Published on
    20-Jul-2015

  • View
    128

  • Download
    0

Embed Size (px)

Transcript

<ul><li><p>UNIVERSIDADE ESTADUAL DO SUDOESTE DA BAHIA CURSO DE CINCIA DA COMPUTAO </p><p>PROGRAMAO CONCORRENTE 2015.1 </p><p>Fbio M. Pereira </p><p>(fabio.mpereira@uesb.edu.br) </p></li><li><p>Programao Concorrente </p><p> Do ingls Concurrent Programming, onde Concurrent significa acontecendo ao mesmo tempo </p><p> um paradigma de programao para a construo de programas de computador que fazem uso da execuo concorrente (simultnea) de vrias tarefas computacionais interativas, que podem ser implementadas como programas separados ou como um conjunto de threads criadas por um nico programa </p><p> diferente de computao paralela! </p><p>Fio, linha, fluxo </p></li><li><p>Programao Concorrente </p><p> A programao concorrente foi usada inicialmente na construo de sistemas operacionais </p><p> Atualmente, ela usada para desenvolver aplicaes em todas as reas da computao </p><p> Este tipo de programao tornou-se ainda mais importante com o advento dos sistemas distribudos e das mquinas com arquitetura paralela </p></li><li><p>Programao Concorrente </p><p> Tradicionalmente, a grande maioria dos programas escritos so programas sequenciais Para serem executados em um nico computador com uma </p><p>nica CPU </p><p> O problema dividido em uma srie de instrues que so executadas uma aps a outra </p><p> Uma nica instruo pode ser executada em um determinado instante de tempo </p><p> Nesse caso, existe somente um fluxo de controle (fluxo de execuo, linha de execuo, thread) no programa </p><p> Isso permite, por exemplo, que o programador realize uma "execuo imaginria" de seu programa apontando com o dedo, a cada instante, o comando que est sendo executado no momento </p></li><li><p>Programao Concorrente </p><p> Um programa concorrente pode ser visto como se tivesse vrios fluxos de execuo </p><p> Para o programador realizar agora uma "execuo imaginaria", ele vai necessitar de vrios dedos, um para cada fluxo de controle </p><p> Em programao concorrente definido o uso simultneo de mltiplos recursos computacionais para resolver um problema </p><p> Para ser executado em diversas CPUs: </p><p> O problema quebrado em partes que podem ser executadas (resolvidas) concorrentemente </p><p> Cada uma destas partes representada por uma srie de instrues, sendo que as instrues de cada parte so executadas concorrentemente em diferentes CPUs </p></li><li><p>Programao Concorrente </p><p> comum em sistemas multiusurio que um mesmo programa seja executado simultaneamente por vrios usurios: Por exemplo, um editor de texto Entretanto, ter 10 execues simultneas do editor de texto no faz </p><p>dele um programa concorrente o que se tem so 10 processos independentes executando o mesmo programa sequencial (compartilhando o mesmo cdigo) </p><p> Cada processo tem a sua rea de dados e ignora a existncia das outras execues do programa </p><p> Esses processos no interagem entre si (no trocam informaes) Neste caso, usado o termo programao paralela, pois vrios </p><p>programas/processos independentes so executados em paralelo pelo computador </p><p> Um programa considerado concorrente quando ele (o prprio programa, durante a sua execuo) origina diferentes processos que iro interagir entre si para realizar alguma tarefa </p></li><li><p>Conceitos </p><p> Paralelismo </p><p> Processamento simultneo fsico </p><p> Concorrncia </p><p> Processamento simultneo lgico (aparente) </p><p> Requer entrelaamento (interleaving) de aes </p><p> Processo </p><p> Execuo de um programa </p><p> Programa Concorrente </p><p> Vrios processos que cooperam para a realizao de uma tarefa </p></li><li><p>Recursos Computacionais </p><p> Um nico computador com mltiplos processadores </p><p> Um nmero arbitrrio de computadores conectados pela rede </p><p> Uma combinao de ambos (mltiplos computadores, com mltiplos processadores, conectados pela rede) </p></li><li><p>Problema Computacional </p><p> O problema computacional geralmente demonstra caractersticas como a habilidade de ser: </p><p> Quebrados em partes de um trabalho que pode ser resolvido de forma simultnea </p><p> Executar mltiplas instrues do programa a qualquer momento no tempo </p><p> Resolvido em menos tempo com vrios recursos de computao do que com um nico recurso computacional </p></li><li><p>Motivao </p><p> Programao concorrente mais complexa do que a programao sequencial: </p><p> Erros dos programas sequenciais + erros associados as interaes entre os processos </p><p> Erros dependem do momento exato em que o escalonador do SO realiza um chaveamento de contexto ou do recebimento de uma mensagem </p><p> Difcil reproduo e identificao </p></li><li><p>Motivao </p><p> Apesar da maior complexidade, existem muitas reas nas quais a programao concorrente vantajosa: </p><p> Em sistemas nos quais existem vrios processadores (mquinas paralelas ou sistemas distribudos), possvel aproveitar esse paralelismo e acelerar a execuo do programa </p><p> Mesmo em sistemas com um nico processador, existem razes para o seu uso em vrios tipos de aplicaes </p></li><li><p>Exemplo </p><p> Leitura, formatao e impresso de arquivo! </p><p> Soluo sequencial: </p><p> Soluo concorrente: </p><p>Arquivo Impressora </p><p>Fsica Processo </p><p>Arquivo Processo </p><p>Leitor </p><p>Buffer Processo </p><p>Impressor </p><p>Impressora Fsica </p></li><li><p>Exemplo </p><p> O uso da programao concorrente natural nas aplicaes que apresentam paralelismo intrnseco, ditas aplicaes inerentemente paralelas </p><p> Nessas aplicaes pode-se distinguir facilmente funes para serem realizadas em paralelo </p><p> Este o caso do spooling de impresso, exemplo que ser apresentado a seguir </p><p> Pode-se dizer que, em geral, a programao concorrente tem aplicao natural na construo de sistemas que tenham de implementar servios que so requisitados de forma imprevisvel </p><p> Nesse caso, o programa concorrente ter um processo para realizar cada tipo de servio </p></li><li><p>Spooling de Impresso </p><p> A seguir considerado um servidor de impresso para uma rede local </p><p> A figura ilustra uma rede local na qual existem diversos computadores pessoais (PC) utilizados pelos usurios e existe um computador dedicado ao papel de servidor de impresso </p><p> O servidor usa um disco magntico para manter os arquivos que esto na fila de impresso </p><p>Rede local incluindo um servidor de impresso dedicado </p><p>Usurios Servidor de Impresso </p></li><li><p>Spooling de Impresso </p><p> importante observar que o programa "servidor de impresso" possui paralelismo intrnseco </p><p> Ele deve: 1. receber mensagens pela rede 2. escrever em disco os pedaos de arquivos recebidos 3. enviar mensagens pela rede (contendo, por exemplo, respostas s </p><p>consultas sobre o seu estado) 4. ler arquivos previamente recebidos (para imprim-los) 5. enviar dados para a impressora </p><p> Todas essas atividades podem ser realizadas simultaneamente </p><p> Uma forma de programar o servidor de impresso usar vrios processos, cada um responsvel por uma atividade em particular Obviamente, esses processos vo precisar trocar informaes para </p><p>realizar o seu trabalho </p></li><li><p>Spooling de Impresso </p><p>Rede </p><p>Receptor Transmissor </p><p>Protocolo </p><p>Escritor </p><p>Leitor Impressor </p><p>Buffer </p><p>Impressora </p></li><li><p>Vantagens </p><p> Economizar tempo e dinheiro </p><p> Resolver grandes problemas </p><p> Muitos problemas so to grandes/complexos que impraticvel ou impossvel resolv-los num nico computador, especialmente quando a memria limitada </p><p> Superar as limitaes da computao sequencial: </p><p> razes fsicas e prticas restringem a construo de computadores cada vez mais rpidos </p><p> Arquiteturas de computadores atuais so cada vez mais dependentes do paralelismo em nvel de hardware para melhorar o desempenho </p></li><li><p>Aplicaes Mais geis (responsive) </p><p> Quando iniciamos uma aplicao, o fluxo principal de execuo, muitas vezes assume mltiplas responsabilidades sequencialmente, dependendo das aes que pedimos para realizar: </p><p> Receber entrada de um usurio, ler um arquivo, executar alguns clculos, acessar um servio web, atualizar um banco de dados, exibir uma resposta ao usurio, e assim por diante </p><p> Se cada uma dessas operaes leva apenas fraes de segundo, ento pode no haver necessidade real para introduzir fluxos adicionais de execuo </p><p> Um nico fluxo pode ser adequado para atender s necessidades </p></li><li><p>Aplicaes Mais geis (responsive) </p><p> Em aplicaes no triviais, no entanto, essas operaes podem no ser to rpidas: Clculos podem levar de alguns segundos at alguns minutos </p><p> Os pedidos de dados a um servio web pode encontrar atrasos de rede, de modo que o fluxo deve aguardar a resposta para chegar </p><p> Enquanto isso est acontecendo, no h nenhuma maneira dos usurios do aplicativo interagirem com, ou interromperem a aplicao, porque um nico fluxo executado at que a operao termine </p><p> Concorrncia pode no s ajudar a tornar as aplicaes mais geis, como tambm podem ajudar a melhorar a experincia do usurio Os aplicativos podem olhar para frente em operaes que o usurio </p><p>poder realizar no prximo passo e realizar as aes necessrias, como indexao ou cache de alguns dados de que o usurio precisa </p></li><li><p>Servios </p><p> Supondo que estamos encarregados de construir um aplicativo que precisa processar lotes de notas fiscais de vrios fornecedores </p><p> Isso exige que ns apliquemos regras e fluxo de trabalho em cada fatura, mas podemos process-las em qualquer ordem </p><p> O processamento dessas faturas sequencialmente no vai aproveitar a taxa de transferncia ou utilizar os recursos disponveis </p><p> Nossa aplicao precisa processar essas faturas simultaneamente </p></li><li><p>Vantagens </p><p> Utilizar mais de um computador ou um computador com mais de um processador, para resolver um determinado problema </p><p> N computadores operando simultaneamente podem atingir o resultado N vezes mais rpido (no ser exatamente N vezes mais rpidos por uma srie de razes) </p><p> Outros motivos incluem: </p><p> Tolerncia a falhas, grande quantidade de memria disponvel, reduo da latncia, etc. </p></li><li><p>Perigos da Concorrncia </p><p> Agora, voc provavelmente est pensando: "Eu posso ter melhor rendimento, quebrando o meu problema e deixando vrios fluxos trabalharem sobre estas partes </p><p> Infelizmente, os problemas raramente pode ser dividido em partes isoladas que podem ser executados totalmente independentes umas das outras Muitas vezes, podemos executar algumas operaes de forma </p><p>independente, mas depois temos que mesclar os resultados parciais para obter o resultado final </p><p> Isso requer que os fluxos comuniquem os resultados parciais e s vezes esperar por esses resultados para finalizar o trabalho </p><p> Devemos possuir ento, uma coordenao entre fluxos que pode levar a problemas de sincronizao e bloqueio (deadlock) </p></li><li><p>Perigos da Concorrncia </p><p> Starvation (inanio) </p><p> Ocorre inanio quando um processo nunca executado ("morre de fome"), pois processos de prioridade maior sempre o impedem de ser executado </p></li><li><p>Perigos da Concorrncia </p><p> Deadlock (interbloqueio, blocagem, impasse) </p><p> No contexto de sistemas operacionais, caracteriza uma situao em que ocorre um impasse e dois ou mais processos ficam impedidos de continuar suas execues, ou seja, ficam bloqueados </p><p> Trata-se de um problema bastante estudado no contexto dos sistemas operacionais, assim como em outras disciplinas, como banco de dados, pois inerente prpria natureza desses sistemas </p><p> O deadlock ocorre quando um ou mais processos est aguardando a liberao de um recurso por um outro processo que, por sua vez, aguarda a liberao de outro recurso alocado ou dependente do primeiro processo </p></li><li><p>Perigos da Concorrncia </p><p> Condies de corrida (race conditions) </p><p> Se duas threads competem para usar o mesmo recurso ou dados, temos uma condio de corrida </p><p> A condio de corrida no acontecero apenas quando dois fluxos modificam dados, tambm pode acontecer mesmo quando um est modificando dados, enquanto o outro est tentando acess-lo </p><p> Condies de corrida pode tornar o comportamento de um programa imprevisvel, produzir execuo incorreta, e produzir resultados incorretos </p></li><li><p>Referncias </p><p> Wikipedia. Programao Concorrente. Acessado em: fev/2015. Disponvel em: http://pt.wikipedia.org/wiki/ Programao_concorrente </p><p> ALCHIERI, E. Programao Concorrente: Introduo. UNB. Acessado em: fev/2015. Disponvel em: www.cic.unb.br/~alchieri/disciplinas/graduacao/pc/introducao.pdf </p><p> TOSCANI, S. Programao Concorrente. PUCRS. Acessado em fev/2015. Disponvel em: www.inf.pucrs.br/~ramos/ sop_progconctext.doc </p><p> SUBRAMANIAM, V. Programming Concurrency on the JVM. The Pragmatic Bookshelf, 2011. </p></li><li><p>UNIVERSIDADE ESTADUAL DO SUDOESTE DA BAHIA CURSO DE CINCIA DA COMPUTAO </p><p>PROGRAMAO CONCORRENTE 2015.1 </p><p>Fbio M. Pereira </p><p>(fabio.mpereira@uesb.edu.br) </p></li></ul>

Recommended

View more >