Download - Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos [email protected]
![Page 2: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/2.jpg)
1945
John Neumann e outros
Primeiro modelo de computador
![Page 3: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/3.jpg)
1960
Sistemas operacionais “time sharing”
![Page 4: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/4.jpg)
Início da década de 80
IBM PC
![Page 5: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/5.jpg)
Situação atual
![Page 6: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/6.jpg)
Evolução dos microprocessadores
![Page 7: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/7.jpg)
Lei de Amdahl (1967)S = tempo gasto no processamento seqüencial
n = número de processadores
![Page 8: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/8.jpg)
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
![Page 9: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/9.jpg)
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
![Page 10: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/10.jpg)
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.)
![Page 11: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/11.jpg)
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%
![Page 12: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/12.jpg)
Resumo até agora
Ganho depende da relação entre o processamento seqüencial e o processamento concorrente do sistema
![Page 13: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/13.jpg)
Pergunta que nos interessa:
A plataforma Java permite aproveitar de forma correta e eficiente o novo hardware multiprocessado?
![Page 14: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/14.jpg)
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.
![Page 15: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/15.jpg)
Java é uma ótima plataforma mas ainda enfrenta algumas lendas urbanas
Pergunta:
new Object() é mais lento do que malloc?
![Page 16: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/16.jpg)
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++
![Page 17: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/17.jpg)
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.
![Page 18: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/18.jpg)
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.
![Page 19: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/19.jpg)
Candidatas a novidades no modo de tratar concorrência no Java 7
• Framework Fork/Join
• TransferQueue
• ParallelArray
![Page 20: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/20.jpg)
Onde obter as candidatas
• Por enquando se chama jsr166y e pode ser obtida em:
• http://gee.cs.oswego.edu/dl/jsr166/dist/
![Page 21: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/21.jpg)
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 }}
![Page 22: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/22.jpg)
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
![Page 23: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/23.jpg)
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.
![Page 24: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/24.jpg)
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(); }
![Page 25: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/25.jpg)
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
![Page 26: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com](https://reader036.vdocuments.com.br/reader036/viewer/2022062512/552fc165497959413d8ea55c/html5/thumbnails/26.jpg)
Lembrete
• O mundo é concorrente
• As coisas no mundo não compartilham dados
• As coisas se comunicam por mensagens
• As coisas, às vezes, falham