27
Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos [email protected]

Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos [email protected]

Embed Size (px)

Citation preview

Page 1: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com

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

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

1960

Sistemas operacionais “time sharing”

Page 4: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com

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

Situação atual

Page 6: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com

Evolução dos microprocessadores

Page 7: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Lembrete

• O mundo é concorrente

• As coisas no mundo não compartilham dados

• As coisas se comunicam por mensagens

• As coisas, às vezes, falham

Page 27: Novas facilidades de concorrência com o Java7 Luiz Arnaldo de Gusmão Bastos lucabastos@gmail.com

Dúvidas?

[email protected]