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
Download

Desenvolvimento Progressivo de Programas Concorrentes