Desenvolvimento Progressivo de Programas Concorrentes Orientados a Objetos Aluno: Sérgio Soares Orientador: Paulo Borba Conteúdo Motivação Método para tratamento de concorrência Aplicação prática do método Impacto em eficiência Conclusões e Trabalhos Futuros Motivação Aumento do uso de ambientes concorrentes WWW (World Wide Web) Necessidade de eficiência Ambiente concorrente Complexidade elevada implementação testes Tratamentos baseados na intuição falta de um padrão Impacto negativo em corretude manutenção Implementação Progressiva Pim padrões de projeto orientação a objetos Aspectos persistência distribuição concorrência Classes da arquitetura Método para tratamento de Concorrência Diretrizes gerais classes básicas coleções de dados mecanismo de persistência fachada e coleções de negócio Diretrizes gerais Evitar a execução concorrente de métodos não atômicos public class ConjuntoPessoas { private Pessoa[] pessoas; private int indice; public void inserir(Pessoa p) { pessoas[indice] = p; indice = indice + 1; } // ... } Exemplo ConjuntoPessoas conjunto = thread1 thread2 1 conjunto.inserir(p1); pessoas[indice] = p1; 2 indice = indice + 1; 3 indice indice indice pessoas // ... p2 p1 conjunto.inserir(p2); pessoas[indice] = p2; indice = indice + 1; Diretrizes específicas classes básicas Impedir a atualização concorrente de cópias de um objeto Mecanismo de timestamp objetos só podem ser atualizados se não houver uma atualização mais recente Diretrizes específicas coleções de dados Nas coleções de dados que utilizam SGBD certificar-se do uso correto de SQL (SGBDR) utilizar transações quando necessário Nas que não utilizam SGBD tratar o acesso a estrutura de dados implementar o serviço de transações Diretrizes específicas mecanismo de persistência Evitar acesso concorrente a estrutura de dados que mantém os canais de comunicação sincronizar métodos Diretrizes específicas coleções de negócio e fachada Identificar regras de negócio que ocasionam situações de corrida sincronizar métodos usar o gerenciador de concorrência sincroniza apenas os threads que podem interferir entre si O Método Utiliza as diretrizes Trata concorrência de baixo para cima na hierarquia da arquitetura Tarefas T1 T2 T3 T4 - Tratar Tratar Tratar Tratar classes básicas coleções de dados mecanismo de persistência coleções de negócio e fachada T1 - Tratando classes básicas Nas classes que os objetos sofrem acesso concorrente aplicar diretrizes gerais Aplicar diretrizes específicas nas demais Aplicação prática do método Aplicar o método a quatro sistemas Sistema 1 desenvolvido na universidade utilizando o Pim Sistemas 2, 3 e 4 já implementados em funcionamento utilizar o método para analisar os sistemas desenvolvidos por duas empresas • empresa X - sistemas 2 e 3 • empresa Y - sistema 4 Sistema 1 Implementa parte da aplicação A Mostrou um pequeno impacto do método menos de 10% do tempo de desenvolvimento menos de 0,5% das linhas de código Número do experimento 80 classes 9.562 linhas cerca de 33 horas de desenvolvimento Sistema 2 Implementa toda a aplicação A Já trata concorrência timestamp transações na fachada quando necessário Problemas encontrados mal uso do mecanismo de exceções mecanismo de persistência com falhas no tratamento aplicado Sistema 2 Números da análise 107 classes 21.204 linhas 9 horas para analisar o sistema sem realizar os tratamentos Sistema 3 Implementado pela mesma empresa do Sistema 2 realiza os mesmos tratamentos utiliza o mesmo mecanismo de persistência Problemas diferenças nos tratamentos aplicados em relação ao Sistema 2 regras de negócio misturadas com os dados prática de programação inocente Sistema 3 Problemas (cont.) duas coleções de dados sem SGBD precisam de tratamento array e socket Números da análise 66 classes 7.805 linhas 4,5 horas para analisar o sistema sem realizar os tratamentos Sistema 4 Também já trata concorrência Implementado pela empresa que desenvolveu o mecanismo de persistência utilizado pelos sistemas 2, 3 e 4 Problemas uso desnecessário de transações uso desnecessário de sincronização usar o timestamp Sistema 4 Números da análise 325 classes 83.865 linhas Quase 8 horas para analisar o sistema sem realizar as correções necessárias Tempo de análise menor devido ao conhecimento prévio do sistema Impacto em eficiência Diferentes tratamentos de concorrência fachada com todos os método sincronizados fachada com transações em todos os métodos coleção de negócio com métodos sincronizados coleção de negócio utilizando o gerenciador de concorrência aplicando o timestamp aplicando o método definido Impacto em eficiência Apenas dois destes tratamentos garantem a corretude se aplicados isoladamente fachada sincronizada aplicando o método Comparação 140 Impacto (%) 120 100 80 Fachada sincronizada 60 Fachada c/ transações 40 Aplicando o método 20 0 -20 3 6 18 30 45 60 180 300 450 600 Número de threads Impacto (%) Comparação 9 8 7 6 5 4 3 2 1 0 Timestamp 3 6 18 30 45 60 180 300 450 600 Número de threads Comparação Synchronized versus gerenciador Impacto (%) 50 40 30 Sem concorrência 20 Com concorrência 10 0 -10 3 6 18 30 45 60 180 300 450 600 Número de threads Comparação com métodos pesados 50 Impacto (%) 40 30 Fachada sincronizada 20 Fachada c/ transações 10 Aplicando o método 0 -10 3 6 18 30 45 60 180 300 450 600 Número de threads Comparação com métodos pesados 35 Impacto (%) 30 25 20 Timestamp 15 10 5 0 3 6 18 30 45 60 180 300 450 600 Número de threads Comparação com métodos pesados Synchronized versus gerenciador Impacto (%) 20 15 10 Sem concorrência 5 Com concorrência 0 -5 3 6 18 30 45 60 180 300 450 600 Número de threads Conclusões Padrão para tratamento de concorrência Ganho em qualidade de software Validação das diretrizes definidas Analisar sistemas já tratados Conclusões Impacto de diferentes tratamentos Impacto pequeno da aplicação do método Proposta de padrões de projetos Fonte bibliográfica Trabalhos futuros Definir as regras utilizando métodos formais provas formais das regras Desenvolver um método com suporte a especificação sistemas críticos Modificar o método para ambiente EJB Desenvolver ferramentas produtividade a curto prazo Trabalhos futuros Documentar os padrões de projeto definidos timestamp e gerenciador de concorrência Estruturar melhor o método sem misturar aspectos de concorrência com outros aspectos regras de negócio, dados programação adaptativa Trabalhos relacionados Concurrent Programming in Java padrões de projeto e regras de sincronização tratamento de concorrência durante a implementação dos requisitos funcionais Removing Unnecessary Syncronization in Java remove sincronizações em tempo de compilação não garante corretude do sistema original