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