Download - Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos [email protected]
1945
John Neumann e outros
Primeiro modelo de computador
1960
Sistemas operacionais “time sharing”
Início da década de 80
IBM PC
Situação atual
Evolução dos microprocessadores
Lei de Amdahl (1967)S = tempo gasto no processamento seqüencial
n = número de processadores
n Speedup
2 1,25
4 1,43
8 1,53
16 1,60
32 1,63
64 1,65
Exemplo da lei de AmdahlS = 60%
Speedup para S=60%
1,25
1,43
1,53
1,61,651,63
1,2
1,3
1,4
1,5
1,6
1,7
2 4 8 16 32 64
P rocessadores
Sp
eed
up
Speedup segundo Am dahl
11,33
1,61,78 1,85 1,88 1,92 1,94
11,43
1,822,11 2,22 2,29 2,35 2,39
1
1,54
2,11
2,582,79 2,91 3,04 3,11
1
1,67
2,5
3,333,75
44,29 4,44
1
1,82
3,08
4,71
5,71
6,4
7,27
7,81
0
1
2
3
4
5
6
7
8
9
Processadores
Sp
ee
du
p 50%
40%
30%
20%
10%
50% 1 1,33 1,6 1,78 1,85 1,88 1,92 1,94
40% 1 1,43 1,82 2,11 2,22 2,29 2,35 2,39
30% 1 1,54 2,11 2,58 2,79 2,91 3,04 3,11
20% 1 1,67 2,5 3,33 3,75 4 4,29 4,44
10% 1 1,82 3,08 4,71 5,71 6,4 7,27 7,81
1 2 4 8 12 16 24 32
Lei de Amdahl modificadaS = tempo gasto no processamento seqüencial
n = número de processadores
H(n) = overhead devido a adicão de threads (sincronização, atividades entre as threads, etc.)
Lei de Gustafsons = tempo gasto no processamento seqüencial
N = número de processadores
n Speedup
2 1,40
4 2,20
8 3,80
16 7,00
32 13,40
64 26,20
s = 60%
Resumo até agora
Ganho depende da relação entre o processamento seqüencial e o processamento concorrente do sistema
Pergunta que nos interessa:
A plataforma Java permite aproveitar de forma correta e eficiente o novo hardware multiprocessado?
Resposta
1. O Java já é uma das melhores plataformas para aplicações concorrentes.
2.Mas o uso correto e eficiente do novo hardware multiprocessado ainda ficará por conta da habilidade do programador.
Java é uma ótima plataforma mas ainda enfrenta algumas lendas urbanas
Pergunta:
new Object() é mais lento do que malloc?
Resposta:
Não
O Garbage collector do Java é tão ou mais eficiente do que fazer gerenciamento direto da memória com malloc/free do C/C++
Outra crendice
A performance sempre piora muito com o uso de synchronized, volatile ou Locks
Totalmente errado. Não deixem de usar os recursos do Java apenas por ouvir falar.
Resumindo
• Java não é tão bom quanto o Erlang para aplicações concorrentes mas é muito bom e melhor do que a maioria das plataformas.
• Desenvolver aplicações concorrentes é difícil e apesar do Java facilitar muitas coisas, não perdoa programação ruim.
Candidatas a novidades no modo de tratar concorrência no Java 7
• Framework Fork/Join
• TransferQueue
• ParallelArray
Onde obter as candidatas
• Por enquando se chama jsr166y e pode ser obtida em:
• http://gee.cs.oswego.edu/dl/jsr166/dist/
Framework Fork/Join
Result solve(Problem problema) { if (problem é pequeno) resolve diretamente else { divide o problema em partes independentes fork novas subtarefas para resolver cada parte join todas as subtarefas compõe os resultados a partir dos subresultados }}
TransferQueue
• Interface que extende BlockingQueuee é usada quando o produtor precisa esperar que os consumidores estejam prontos para receber os elementos.
• A classe que implementa esta interface é LinkedTransferQueue que é uma TransferQueue ilimitada baseada em nós linkados
ParallelArray
• Como o nome diz, é um array que suporta operações paralelas
• Fornece operações do tipo: apply, map, reduce, select, transform, etc.
• Encapsula um ForkJoinExecutor e um array de modo a permitir as operações paralelas.
Exemplo de ParallelArrayimport static Ops.*;class StudentStatistics { ParallelArray<Student> students = ... // ... public double getMaxSeniorGpa() { return students.withFilter(isSenior).withMapping(gpaField).max(); }
// helpers: static final class IsSenior implements Predicate<Student> { public boolean evaluate(Student s) { return s.credits > 90; } } static final IsSenior isSenior = new IsSenior(); static final class GpaField implements MappertoDouble<Student> { public double map(Student s) { return s.gpa; } } static final GpaField gpaField = new GpaField(); }
O que pensa o mentor das novidades• O prof. Doug Lea não espera uma adoção
em massa das novas facilidades.
• Poucas aplicações precisarão do seu uso.
• Mas os que realmente precisarem terão nas mãos mais opções
Lembrete
• O mundo é concorrente
• As coisas no mundo não compartilham dados
• As coisas se comunicam por mensagens
• As coisas, às vezes, falham
Dúvidas?