Sobre desempenho da api Join Fork do java 7

4 respostas
G

Prezados,

atualmente utilizo ExecutorService, mas não muito satisfeito busco constantes melhorias em termos de desempenho e aí vi no java 7 a tal join fork http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ForkJoinPool.html
alguém sabe dizer se existe mesmo um ganho em termos de performance?

4 Respostas

ViniGodoy

Seu problema de desempenho é mesmo no chaveamento entre threads? Já usou um profiler para medir?

J

Atribuir a questão de desempenho a threads e núcleos é uma ilusão(de certa forma). Quanto melhor for a lógica empregada para resolver determinado tipo de problema, melhor será o tempo de resposta do seu programa. A jvisualvm é uma ótima ferramenta para encontrar gargalos em soluções.

G

com ajuda do debugger e do TOP do linux eu identifiquei o problema e contornei parcialmente.
acontece que em cada thread eu tenho uma comunicação via sockets.
como a resposta demora o socket fica em aberto por um tempo muito grande e a thread não é encerrada, mesmo chamando o executor.shutdownNow();
aí difnini em cada chamada socket um timeout de no máximo 10 segundos, ajudou. melhorou. mas ainda assim não está perfeito. o consumo de memória fica em torno de 70% e travando a aplicação.
num mundo ideal eu conseguiria melhorar o IO mexendo no próprio SO, vou tentar otimizar isso de acordo com esse tutorail: http://deigratia33.blogspot.com.br/2007/12/linux-como-melhorar-o-desempenho-em.html
e com relação às threads eu pensei em modificar para join fork acreditando ter aí um melhor desempenho. claro que não espero mágica.
é isso.

ViniGodoy

O ideal então é usar o NIO. Com os selectors, você pode ter um número muito pequeno de threads para controlar todos os seus sockets.

Criado 30 de março de 2012
Ultima resposta 30 de mar. de 2012
Respostas 4
Participantes 3