facilitando a programação concorrente com o fork/join
TRANSCRIPT
![Page 1: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/1.jpg)
FACILITANDO A PROGRAMAÇÃO
CONCORRENTE COM O FORK/JOIN
Mário Amaral@mario_fts
Thursday, December 6, 12
![Page 2: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/2.jpg)
QUE MÁRIO?
Thursday, December 6, 12
![Page 3: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/3.jpg)
QUE MÁRIO?
•Desenvolvedor Java desde 2004
Thursday, December 6, 12
![Page 4: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/4.jpg)
QUE MÁRIO?
•Desenvolvedor Java desde 2004
• Instrutor na Caelum
Thursday, December 6, 12
![Page 5: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/5.jpg)
QUE MÁRIO?
•Desenvolvedor Java desde 2004
• Instrutor na Caelum
• Caelum-Stella
Thursday, December 6, 12
![Page 6: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/6.jpg)
QUE MÁRIO?
•Desenvolvedor Java desde 2004
• Instrutor na Caelum
• Caelum-Stella
• Personagem de games desde 1981
Thursday, December 6, 12
![Page 7: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/7.jpg)
VAMOS FALAR DE PARALELISMO
Thursday, December 6, 12
![Page 8: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/8.jpg)
POR QUE PARALELIZAR
• Ganhar tempo
Thursday, December 6, 12
![Page 9: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/9.jpg)
POR QUE PARALELIZAR
• Aproveitar recursos ociosos
Thursday, December 6, 12
![Page 10: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/10.jpg)
O QUE PARALELIZAR?
Thursday, December 6, 12
![Page 11: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/11.jpg)
O QUE PARALELIZAR?
• Tarefas Independentes com processamento pesado
Thursday, December 6, 12
![Page 12: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/12.jpg)
O QUE PARALELIZAR?
• Tarefas Independentes com processamento pesado
• Processar mensagens de uma fila
Thursday, December 6, 12
![Page 13: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/13.jpg)
O QUE PARALELIZAR?
• Tarefas Independentes com processamento pesado
• Processar mensagens de uma fila
• Conversão de dados
Thursday, December 6, 12
![Page 14: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/14.jpg)
O QUE PARALELIZAR?
• Tarefas Independentes com processamento pesado
• Processar mensagens de uma fila
• Conversão de dados
• Aplicar filtros em imagens
Thursday, December 6, 12
![Page 15: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/15.jpg)
O PROBLEMA
Thursday, December 6, 12
![Page 16: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/16.jpg)
O PROBLEMA
• Conversão de dados
Thursday, December 6, 12
![Page 17: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/17.jpg)
O PROBLEMA
• Conversão de dados
•Dados de vendas
Thursday, December 6, 12
![Page 18: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/18.jpg)
O PROBLEMA
• Conversão de dados
•Dados de vendas
• CSV => JSON
Thursday, December 6, 12
![Page 19: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/19.jpg)
OS DADOS
Thursday, December 6, 12
![Page 20: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/20.jpg)
OS DADOS • 1;1;04122012;fichario preto;9;33.55
Thursday, December 6, 12
![Page 21: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/21.jpg)
OS DADOS • 1;1;04122012;fichario preto;9;33.55
Thursday, December 6, 12
![Page 22: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/22.jpg)
OS DADOS • 1;1;04122012;fichario preto;9;33.55
{ "number": 1, "terminal": 1, "description": "fichario preto", "price": 33.55, "date": "04122012"}
Thursday, December 6, 12
![Page 23: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/23.jpg)
PASSO A PASSO
• Ler os dados do CSV e converter para objetos.
• Para cada objeto, converter em Json.
• Adicionar o Json em uma lista de String.
• Gravar o conteúdo da lista em um arquivo.
Thursday, December 6, 12
![Page 24: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/24.jpg)
SINGLE THREAD
• Processar tudo sequencialmente em um loop
• Implementação mais simples
Thursday, December 6, 12
![Page 25: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/25.jpg)
CÓDIGO....
public List<String> toJson(List<?> list) { List<String> lines = new ArrayList<>(); for (Object value : list) { lines.add(new JsonObject(value)
.toString()); } return lines; }
Thursday, December 6, 12
![Page 26: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/26.jpg)
TESTANDO
• 1 milhão de registros
• Executar 10 vezes seguidas cada método.
•Desconsiderar o menor e o maior tempo.
•Obter o tempo médio.
Thursday, December 6, 12
![Page 27: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/27.jpg)
TEMPO
Método Tempo Médio (ms)
Single 5562
Thursday, December 6, 12
![Page 28: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/28.jpg)
MULTI THREAD
Thursday, December 6, 12
![Page 29: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/29.jpg)
MULTI THREAD
• Cada conversão é independente da outra.
Thursday, December 6, 12
![Page 30: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/30.jpg)
MULTI THREAD
• Cada conversão é independente da outra.
• Múltiplos processadores
Thursday, December 6, 12
![Page 31: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/31.jpg)
MULTI THREAD
• Cada conversão é independente da outra.
• Múltiplos processadores
•Dividir e distribuir!
Thursday, December 6, 12
![Page 32: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/32.jpg)
threads.add(createANewThread(sales, jsons, beginIndex,finalIndex));
Thursday, December 6, 12
![Page 33: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/33.jpg)
threads.add(createANewThread(sales, jsons, beginIndex,finalIndex)); beginIndex = finalIndex; finalIndex = finalIndex + amount >= size ?
size: finalIndex + amount;
Thursday, December 6, 12
![Page 34: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/34.jpg)
while (true) { threads.add(createANewThread(sales, jsons, beginIndex,finalIndex)); beginIndex = finalIndex; finalIndex = finalIndex + amount >= size ?
size: finalIndex + amount;
}
Thursday, December 6, 12
![Page 35: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/35.jpg)
while (true) { threads.add(createANewThread(sales, jsons, beginIndex,finalIndex)); beginIndex = finalIndex; finalIndex = finalIndex + amount >= size ?
size: finalIndex + amount;
if (beginIndex == size) { break; }}
Thursday, December 6, 12
![Page 36: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/36.jpg)
protected List<String> convertToJson(List<Sale> sales){...
while (true) { threads.add(createANewThread(sales, jsons, beginIndex,finalIndex)); beginIndex = finalIndex; finalIndex = finalIndex + amount >= size ?
size: finalIndex + amount;
if (beginIndex == size) { break; }}
}
Thursday, December 6, 12
![Page 37: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/37.jpg)
protected List<String> convertToJson(List<Sale> sales){
int size = sales.size(); int amount = size / NUMBER_OF_THREADS; //4 int beginIndex = 0; int finalIndex = amount;
List<Thread> threads = new ArrayList<>(); List<String> jsons = Collections.synchronizedList(
new ArrayList<String>());
while (true) { //Cria uma nova thread para cada parte
}
Thursday, December 6, 12
![Page 38: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/38.jpg)
protected List<String> convertToJson(List<Sale> sales){
... for (Thread thread : threads) { thread.start(); }
return jsons;
}
Thursday, December 6, 12
![Page 39: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/39.jpg)
protected List<String> convertToJson(List<Sale> sales){
... for (Thread thread : threads) { thread.start(); }
for (Thread thread : threads) { thread.join(); }
return jsons;
}
Thursday, December 6, 12
![Page 40: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/40.jpg)
@Override protected List<String> convertToJson(List<Sale> vendas) throws Exception {
System.out.println("Convert to json....");
int size = vendas.size(); int amount = size / NUMBER_OF_THREADS; //4 int beginIndex = 0; int finalIndex = amount;
List<Thread> threads = new ArrayList<>(); List<String> jsons = Collections.synchronizedList(new ArrayList<String>());
while (true) { threads.add(createANewThread(vendas, jsons, beginIndex, finalIndex)); beginIndex = finalIndex; finalIndex = finalIndex + amount >= size ? size: finalIndex + amount;
if (beginIndex == size) { break; } }
for (Thread thread : threads) { thread.start(); }
for (Thread thread : threads) { thread.join(); }
System.out.println("Finished!\n"); return jsons;
}Thursday, December 6, 12
![Page 41: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/41.jpg)
TEMPO
Método Tempo Médio (ms)
Single 5562
Multi Thread 3739
Thursday, December 6, 12
![Page 42: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/42.jpg)
COMPARATIVO
0
2000
4000
6000
Tempo
37395562
Single Multi Thread
Thursday, December 6, 12
![Page 43: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/43.jpg)
DIFICULDADES
Thursday, December 6, 12
![Page 44: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/44.jpg)
DIFICULDADES
•Decidir a quantidade de Threads
Thursday, December 6, 12
![Page 45: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/45.jpg)
DIFICULDADES
•Decidir a quantidade de Threads
•Dividir o trabalho
Thursday, December 6, 12
![Page 46: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/46.jpg)
DIFICULDADES
•Decidir a quantidade de Threads
•Dividir o trabalho
• Juntar tudo no final
Thursday, December 6, 12
![Page 47: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/47.jpg)
protected List<String> convertToJson(List<Sale> sales){
int size = sales.size(); int amount = size / NUMBER_OF_THREADS; //4 int beginIndex = 0; int finalIndex = amount;
List<Thread> threads = new ArrayList<>(); List<String> jsons = Collections.synchronizedList(
new ArrayList<String>());
while (true) { //Cria uma nova thread para cada parte
}
Thursday, December 6, 12
![Page 48: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/48.jpg)
FORK / JOIN
Thursday, December 6, 12
![Page 49: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/49.jpg)
FORK / JOIN
• Java 7
Thursday, December 6, 12
![Page 50: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/50.jpg)
FORK / JOIN
• Java 7
•Dividir tarefas entre múltiplos processadores
Thursday, December 6, 12
![Page 51: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/51.jpg)
FORK / JOIN
• Java 7
•Dividir tarefas entre múltiplos processadores
• Tarefas que podem ser quebradas recursivamente
Thursday, December 6, 12
![Page 52: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/52.jpg)
class ExemploForkJoin extends RecursiveTask<Long>{
@Override protected Long compute() {
if(qtdeDeDados < LIMITE){ // execute a tarefa }else{ //Divida o trabalho entre subtarefas //Execute as subtarefas e espere o resultado } }}
COMO FUNCIONA
Thursday, December 6, 12
![Page 53: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/53.jpg)
COMO FUNCIONA
Thursday, December 6, 12
![Page 54: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/54.jpg)
COMO FUNCIONA
Thursday, December 6, 12
![Page 55: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/55.jpg)
COMO FUNCIONA
Thursday, December 6, 12
![Page 56: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/56.jpg)
COMO FUNCIONA
Thursday, December 6, 12
![Page 57: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/57.jpg)
COMO FUNCIONA
fork()
Thursday, December 6, 12
![Page 58: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/58.jpg)
COMO FUNCIONA
fork() fork()
Thursday, December 6, 12
![Page 59: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/59.jpg)
COMO FUNCIONA
fork() fork()
Thursday, December 6, 12
![Page 60: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/60.jpg)
COMO FUNCIONA
fork() fork()
Thursday, December 6, 12
![Page 61: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/61.jpg)
COMO FUNCIONA
fork() fork()
Thursday, December 6, 12
![Page 62: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/62.jpg)
COMO FUNCIONA
fork() fork()
Thursday, December 6, 12
![Page 63: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/63.jpg)
COMO FUNCIONA
fork() fork()
Thursday, December 6, 12
![Page 64: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/64.jpg)
COMO FUNCIONA
fork() fork()
Thursday, December 6, 12
![Page 65: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/65.jpg)
COMO FUNCIONA
fork() fork()
join()
Thursday, December 6, 12
![Page 66: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/66.jpg)
COMO FUNCIONA
fork() fork()
join() join()
Thursday, December 6, 12
![Page 67: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/67.jpg)
COMO FUNCIONA
fork() fork()
join() join()
Thursday, December 6, 12
![Page 68: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/68.jpg)
COMO FUNCIONA
fork()
join()
fork()
join() join()
Thursday, December 6, 12
![Page 69: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/69.jpg)
COMO FUNCIONA
fork()
join()
fork()
join()
join() join()
Thursday, December 6, 12
![Page 70: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/70.jpg)
IMPLEMENTANDOpublic class JsonTask extends RecursiveTask<List<String>>{
private final int THRESHOLD = 10000; private List<Sale> list; //constructor...
@Override protected List<String> compute() { }}
Thursday, December 6, 12
![Page 71: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/71.jpg)
IMPLEMENTANDOpublic class JsonTask extends RecursiveTask<List<String>>{
private final int THRESHOLD = 10000; private List<Sale> list; //constructor...
@Override protected List<String> compute() { }}
Thursday, December 6, 12
![Page 72: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/72.jpg)
IMPLEMENTANDOpublic class JsonTask extends RecursiveTask<List<String>>{
private final int THRESHOLD = 10000; private List<Sale> list; //constructor...
@Override protected List<String> compute() { }}
Thursday, December 6, 12
![Page 73: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/73.jpg)
IMPLEMENTANDOpublic class JsonTask extends RecursiveTask<List<String>>{
private final int THRESHOLD = 10000; private List<Sale> list; //constructor...
@Override protected List<String> compute() { }}
Thursday, December 6, 12
![Page 74: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/74.jpg)
@Overrideprotected List<String> compute() { List<String> jsons = new ArrayList<>(); int size = list.size(); if ( size < THRESHOLD){ jsons.addAll(new JsonMapper().toJson(list)); }else{ ... } return jsons;}
Thursday, December 6, 12
![Page 75: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/75.jpg)
}else{
}
Thursday, December 6, 12
![Page 76: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/76.jpg)
}else{ JsonTask left = new JsonTask(list.subList(0, size / 2));
}
Thursday, December 6, 12
![Page 77: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/77.jpg)
}else{ JsonTask left = new JsonTask(list.subList(0, size / 2)); JsonTask right = new JsonTask(list.subList(size / 2, size));
}
Thursday, December 6, 12
![Page 78: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/78.jpg)
}else{ JsonTask left = new JsonTask(list.subList(0, size / 2)); JsonTask right = new JsonTask(list.subList(size / 2, size)); left.fork();
}
Thursday, December 6, 12
![Page 79: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/79.jpg)
}else{ JsonTask left = new JsonTask(list.subList(0, size / 2)); JsonTask right = new JsonTask(list.subList(size / 2, size)); left.fork(); right.fork();
}
Thursday, December 6, 12
![Page 80: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/80.jpg)
}else{ JsonTask left = new JsonTask(list.subList(0, size / 2)); JsonTask right = new JsonTask(list.subList(size / 2, size)); left.fork(); right.fork();
jsons.addAll(right.join()); jsons.addAll(left.join());}
Thursday, December 6, 12
![Page 81: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/81.jpg)
P
Thursday, December 6, 12
![Page 82: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/82.jpg)
P
L
fork()
R
fork()
Thursday, December 6, 12
![Page 83: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/83.jpg)
P
L
fork()
join()
R
fork()
join()
Thursday, December 6, 12
![Page 84: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/84.jpg)
}else{ JsonTask left = new JsonTask(list.subList(0, size / 2)); JsonTask right = new JsonTask(list.subList(size / 2, size)); left.fork(); right.fork();
jsons.addAll(right.join()); jsons.addAll(left.join());}
Thursday, December 6, 12
![Page 85: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/85.jpg)
P
Poolde Threads
Thursday, December 6, 12
![Page 86: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/86.jpg)
P
Poolde Threads P
Thursday, December 6, 12
![Page 87: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/87.jpg)
P
L
fork()
R
fork()
Poolde Threads P
Thursday, December 6, 12
![Page 88: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/88.jpg)
P
L
fork()
R
fork()
Poolde Threads P L R
Thursday, December 6, 12
![Page 89: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/89.jpg)
}else{ JsonTask jsonTaskLeft = new JsonTask(list.subList(0, size / 2)); JsonTask jsonTaskRight = new JsonTask(list.subList(size / 2, size)); jsonTaskLeft.fork(); jsonTaskRight.fork();
jsons.addAll(jsonTaskRight.join()); jsons.addAll(jsonTaskLeft.join());}
Thursday, December 6, 12
![Page 90: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/90.jpg)
P
L
fork()
R
fork()
Poolde Threads P L R
Thursday, December 6, 12
![Page 91: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/91.jpg)
RECURSO OCIOSO
Thursday, December 6, 12
![Page 92: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/92.jpg)
}else{ JsonTask jsonTaskLeft = new JsonTask(list.subList(0, size / 2)); JsonTask jsonTaskRight = new JsonTask(list.subList(size / 2, size)); jsonTaskLeft.fork(); jsonTaskRight.fork();
jsons.addAll(jsonTaskRight.join()); jsons.addAll(jsonTaskLeft.join());}
Thursday, December 6, 12
![Page 93: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/93.jpg)
}else{ JsonTask jsonTaskLeft = new JsonTask(list.subList(0, size / 2)); JsonTask jsonTaskRight = new JsonTask(list.subList(size / 2, size)); jsonTaskLeft.fork(); jsonTaskRight.fork();
jsons.addAll(jsonTaskRight.join()); jsons.addAll(jsonTaskLeft.join());}
Thursday, December 6, 12
![Page 94: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/94.jpg)
}else{ JsonTask jsonTaskLeft = new JsonTask(list.subList(0, size / 2)); JsonTask jsonTaskRight = new JsonTask(list.subList(size / 2, size)); jsonTaskLeft.fork();
jsons.addAll(jsonTaskRight.join()); jsons.addAll(jsonTaskLeft.join());}
Thursday, December 6, 12
![Page 95: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/95.jpg)
}else{ JsonTask jsonTaskLeft = new JsonTask(list.subList(0, size / 2)); JsonTask jsonTaskRight = new JsonTask(list.subList(size / 2, size)); jsonTaskLeft.fork();
jsons.addAll(jsonTaskRight.compute()); jsons.addAll(jsonTaskLeft.join());}
Thursday, December 6, 12
![Page 96: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/96.jpg)
P
Poolde Threads
L R
P
Thursday, December 6, 12
![Page 97: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/97.jpg)
P
L R
Poolde Threads
LL
P
Thursday, December 6, 12
![Page 98: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/98.jpg)
P
L
fork()
R
Poolde Threads
LL
P
Thursday, December 6, 12
![Page 99: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/99.jpg)
P
L
fork()
R
Poolde Threads
L
P
L
Thursday, December 6, 12
![Page 100: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/100.jpg)
P
L
fork()
R
Poolde Threads
L
P L
Thursday, December 6, 12
![Page 101: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/101.jpg)
P
L
fork()
R
Poolde Threads
R
LP
Thursday, December 6, 12
![Page 102: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/102.jpg)
P
L
fork()
R
compute()
Poolde Threads
R
LP
Thursday, December 6, 12
![Page 103: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/103.jpg)
P
L
fork()
R
compute()
Poolde Threads R L
Thursday, December 6, 12
![Page 104: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/104.jpg)
P
L
fork()
R
Poolde Threads
compute()
LR
P
Thursday, December 6, 12
![Page 105: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/105.jpg)
P
L
fork()
R
Poolde Threads
compute()
return
LR
P
Thursday, December 6, 12
![Page 106: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/106.jpg)
P
L
fork()
R
Poolde Threads
compute()
return
LP
Thursday, December 6, 12
![Page 107: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/107.jpg)
}else{ JsonTask jsonTaskLeft = new JsonTask(list.subList(0, size / 2)); JsonTask jsonTaskRight = new JsonTask(list.subList(size / 2, size)); jsonTaskLeft.fork();
jsons.addAll(jsonTaskRight.compute()); jsons.addAll(jsonTaskLeft.join());}
Thursday, December 6, 12
![Page 108: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/108.jpg)
P
L
fork()
R
Poolde Threads P L
compute()
return
Thursday, December 6, 12
![Page 109: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/109.jpg)
P
L
fork()
R
Poolde Threads P L
compute()
returnjoin()
Thursday, December 6, 12
![Page 110: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/110.jpg)
P
L
fork()
R
Poolde Threads P
compute()
returnjoin()
Thursday, December 6, 12
![Page 111: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/111.jpg)
EXECUTANDO public class JsonForkJoinConverter {protected List<String> convertToJson(List<Sale> sales){
ForkJoinPool forkJoinPool = new ForkJoinPool(); return forkJoinPool.invoke(new JsonTask(sales)); }}
Thursday, December 6, 12
![Page 112: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/112.jpg)
TEMPO
MétodoTempo
Médio (ms)
Single 5562
Multi Thread 3739
Fork/Join 3461
Thursday, December 6, 12
![Page 113: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/113.jpg)
COMPARATIVO
0
2000
4000
6000
Tempo
346137395562
Single Multi Thread Fork/join
Thursday, December 6, 12
![Page 114: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/114.jpg)
@Override protected List<String> compute() { List<String> jsons = new ArrayList<>(); int size = list.size(); if ( size < THRESHOLD){ jsons.addAll(new JsonMapper().toJson(list)); } else{ JsonTask jsonTaskFirst = new JsonTask(list.subList(0, size / 2)); jsonTaskFirst.fork(); JsonTask jsonTaskSecond = new JsonTask(list.subList(size / 2, size)); jsons.addAll(jsonTaskSecond.compute()); jsons.addAll(jsonTaskFirst.join()); } return jsons; }
Thursday, December 6, 12
![Page 115: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/115.jpg)
PROBLEMS?
Thursday, December 6, 12
![Page 116: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/116.jpg)
PROBLEMS?
Thursday, December 6, 12
![Page 117: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/117.jpg)
A ORDEM DAS CHAMADAS
•Ordem das chamadas é importante.
• Perde todo o paralelismo
Thursday, December 6, 12
![Page 118: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/118.jpg)
left.fork();long rightAns = right.compute();long leftAns = left.join();return leftAns + rightAns;
P
P
L R
Thursday, December 6, 12
![Page 119: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/119.jpg)
left.fork();long rightAns = right.compute();long leftAns = left.join();return leftAns + rightAns;
P
P
L R
fork()
L
Thursday, December 6, 12
![Page 120: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/120.jpg)
left.fork();long rightAns = right.compute();long leftAns = left.join();return leftAns + rightAns;
P
R
L R
fork()
L
compute()
Thursday, December 6, 12
![Page 121: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/121.jpg)
left.fork();long rightAns = right.compute();long leftAns = left.join();return leftAns + rightAns;
P
P
L R
fork()
L
compute()
return
Thursday, December 6, 12
![Page 122: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/122.jpg)
left.fork();long rightAns = right.compute();long leftAns = left.join();return leftAns + rightAns;
P
P
L R
fork() compute()
returnjoin()
Thursday, December 6, 12
![Page 123: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/123.jpg)
left.fork();
return leftAns + rightAns;
long rightAns = right.compute();long leftAns = left.join();
Thursday, December 6, 12
![Page 124: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/124.jpg)
left.fork();
return leftAns + rightAns;long rightAns = right.compute();long leftAns = left.join();
Thursday, December 6, 12
![Page 125: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/125.jpg)
P
P
L R
left.fork();long leftAns = left.join();long rightAns = right.compute();return leftAns + rightAns;
Thursday, December 6, 12
![Page 126: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/126.jpg)
P
P
L R
fork()
L
left.fork();long leftAns = left.join();long rightAns = right.compute();return leftAns + rightAns;
Thursday, December 6, 12
![Page 127: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/127.jpg)
P
P
L R
fork()
L
left.fork();long leftAns = left.join();long rightAns = right.compute();return leftAns + rightAns;
Bloqueia a thread!
Thursday, December 6, 12
![Page 128: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/128.jpg)
P
P
L R
fork()
L
left.fork();long leftAns = left.join();long rightAns = right.compute();return leftAns + rightAns;
join()
Thursday, December 6, 12
![Page 129: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/129.jpg)
P
R
L R
fork()
left.fork();long leftAns = left.join();long rightAns = right.compute();return leftAns + rightAns;
join()
compute()
Thursday, December 6, 12
![Page 130: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/130.jpg)
P
R
L R
fork() compute()
return
left.fork();long leftAns = left.join();long rightAns = right.compute();return leftAns + rightAns;
join()
Thursday, December 6, 12
![Page 131: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/131.jpg)
P
P
L R
fork() compute()
returnjoin()
left.fork();long leftAns = left.join();long rightAns = right.compute();return leftAns + rightAns;
Thursday, December 6, 12
![Page 132: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/132.jpg)
long rightAns = right.compute();left.fork();long leftAns = left.join();return leftAns + rightAns;
Thursday, December 6, 12
![Page 133: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/133.jpg)
P
P
L R
long rightAns = right.compute();left.fork();long leftAns = left.join();return leftAns + rightAns;
Thursday, December 6, 12
![Page 134: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/134.jpg)
P
P
L R
long rightAns = right.compute();left.fork();long leftAns = left.join();return leftAns + rightAns;
compute()
Thursday, December 6, 12
![Page 135: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/135.jpg)
P
R
L R
long rightAns = right.compute();left.fork();long leftAns = left.join();return leftAns + rightAns;
compute()
Thursday, December 6, 12
![Page 136: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/136.jpg)
P
R
L R
long rightAns = right.compute();left.fork();long leftAns = left.join();return leftAns + rightAns;
compute()
return
Thursday, December 6, 12
![Page 137: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/137.jpg)
P
P
L R
long rightAns = right.compute();left.fork();long leftAns = left.join();return leftAns + rightAns;
compute()
return
Thursday, December 6, 12
![Page 138: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/138.jpg)
P
P
L R
long rightAns = right.compute();left.fork();long leftAns = left.join();return leftAns + rightAns;
compute()
return
fork()
L
Thursday, December 6, 12
![Page 139: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/139.jpg)
P
P
L R
long rightAns = right.compute();left.fork();long leftAns = left.join();return leftAns + rightAns;
compute()
return
fork()
L
Thursday, December 6, 12
![Page 140: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/140.jpg)
P
P
L R
fork() compute()
returnjoin()
long rightAns = right.compute();left.fork();long leftAns = left.join();return leftAns + rightAns;
Thursday, December 6, 12
![Page 141: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/141.jpg)
P
P
L R
fork() compute()
returnjoin()
long rightAns = right.compute();left.fork();long leftAns = left.join();return leftAns + rightAns;
Executa Sequencialmente
Thursday, December 6, 12
![Page 142: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/142.jpg)
left.fork();long rightAns = right.compute();long leftAns = left.join();return leftAns + rightAns;
Thursday, December 6, 12
![Page 143: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/143.jpg)
• Código aqui:
• github.com/mariofts/javaOneBR-2012
• Links / Refs:
• http://homes.cs.washington.edu/~djg/teachingMaterials/grossmanSPAC_forkJoinFramework.html
• http://www.oracle.com/technetwork/articles/java/fork-join-422606.html
• http://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html
Thursday, December 6, 12
![Page 144: Facilitando a Programação concorrente com o Fork/Join](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a23e961a28ab7b3c8b56cd/html5/thumbnails/144.jpg)
OBRIGADO!
github.com/mariofts
@mario_fts
Thursday, December 6, 12