Seja bem vindo ao Fórum do JavaFree.org
Aqui você irá encontrar respostas para TUDO o que você precisa sobre java.
Deseja participar? Crie sua conta ou efetue seu login
Pessoal,
Fiz uma aplicação "piloto" que basicamente pega algumas informações no banco e pra cada informação acessa uma URL, lê um XML, faz o parse deste XML usando JDOM, utilizando uma expressão XPATH e exibe estas informações na tela ( na verdade, a aplicação final deverá inserir estas informações no banco )
Fiz tudo isso utlizando Threads pois inicialmente não queria que meu programa deixasse de fazer o resto do processo se não conseguisse finalizar um deles, por exemplo.
Enfm ... o problema é que usando Threads tive um problema de memória que resolvi setando algumas configurações da VM. Resolvi esta questão, mas percebi que ao executar, o programa demorava muito pra exibir as informações, cheguei a contar 20 segundos e só depois disso as informações começaram a ser exibidas no mesmo momento, quase que instantaneamente.
O que acontece? É assim mesmo que funciona? Parece que o programa executa todas as threads de uma vez, faz o que ele tem que fazer e só depois as informações são exibidas. Achei isso muito estranho.
Alguém poderia me dar uma ajuda apenas dizendo se é assim mesmo que funciona? Ou talvez não seja assim quando eu estiver num ambiente realmente multiprocessado ...
Ah, também fiz este exemplo sem usar threads e ele funcionou numa boa.
Valeu! _________________public Goathi extends Programador implements AspiranteAProgramadorJava{
normal nao é, mas depende muito de como programou.
Nao sei se voce está usando uma GUI (Swing) mas o seu problema pode ser a atualizacao da GUI, que roda num (único) Thread próprio (AWT-Event Queue). Se esse for bloqueado, a GUI somente irá mostrar novos valores quando esse Thread desbloquear.
Outro ponto é o problema de memória, indica que voce está usando muita memória o que tambem pode influenciar a velocidade.
Sem ter o código é dificil dizer mais (as vezes vendo o código tambem nao facilita, dependendo da complexidade :--)
Voce pode tentar comentar/substituir algumas instrucoes ate achar o que realmente está causando o problema. Exemplo: em vez de esperar dados externos, use alguns locais (constantes).
[]] _________________ Nome real: Carlos F. Heuberger
Removeram os meus direitos de administrador e moderador - sem aviso, pela segunda vez - contate o ombudsman (?), a equipejavafree ou a "alta gerência" se necessário - Que pena... que terminou dessa maneira!
Para resolver isso vc terá que fazer vários testes!
entre elas, executar cada thread separadamente, para ver se uma delas está demorando, ou apenas iniciar o processo de cada thread separadamente.
Outra coisa é fazer um log de tempo que cada thread, para poder saber onde é que o processo fica lento!
e também verificar conexão com banco, consultas e até conexão com internet, já que vc informou que o processo acessa urls.
só depois disso vc irá saber onde está o problema! _________________Gregui Shigunov
goathiPosts:8
Pessoal,
Fiz uma aplicação "piloto" que basicamente pega algumas informações no banco e pra cada informação acessa uma URL, lê um XML, faz o parse deste XML usando JDOM, utilizando uma expressão XPATH e exibe estas informações na tela ( na verdade, a aplicação final deverá inserir estas informações no banco )
Fiz tudo isso utlizando Threads pois inicialmente não queria que meu programa deixasse de fazer o resto do processo se não conseguisse finalizar um deles, por exemplo.
Enfm ... o problema é que usando Threads tive um problema de memória que resolvi setando algumas configurações da VM. Resolvi esta questão, mas percebi que ao executar, o programa demorava muito pra exibir as informações, cheguei a contar 20 segundos e só depois disso as informações começaram a ser exibidas no mesmo momento, quase que instantaneamente.
O que acontece? É assim mesmo que funciona? Parece que o programa executa todas as threads de uma vez, faz o que ele tem que fazer e só depois as informações são exibidas. Achei isso muito estranho.
Alguém poderia me dar uma ajuda apenas dizendo se é assim mesmo que funciona? Ou talvez não seja assim quando eu estiver num ambiente realmente multiprocessado ...
Ah, também fiz este exemplo sem usar threads e ele funcionou numa boa.
Valeu!
_________________public Goathi extends Programador implements AspiranteAProgramadorJava{
}
goathiPosts:8
Alguém saberia apenas se geralmente isso acontence? É normal?
_________________public Goathi extends Programador implements AspiranteAProgramadorJava{
}
simuPosts:9417
normal nao é, mas depende muito de como programou.
Nao sei se voce está usando uma GUI (Swing) mas o seu problema pode ser a atualizacao da GUI, que roda num (único) Thread próprio (AWT-Event Queue). Se esse for bloqueado, a GUI somente irá mostrar novos valores quando esse Thread desbloquear.
Outro ponto é o problema de memória, indica que voce está usando muita memória o que tambem pode influenciar a velocidade.
Sem ter o código é dificil dizer mais (as vezes vendo o código tambem nao facilita, dependendo da complexidade :--)
Voce pode tentar comentar/substituir algumas instrucoes ate achar o que realmente está causando o problema. Exemplo: em vez de esperar dados externos, use alguns locais (constantes).
[]]
_________________ Nome real: Carlos F. Heuberger
Removeram os meus direitos de administrador e moderador - sem aviso, pela segunda vez - contate o ombudsman (?), a equipejavafree ou a "alta gerência" se necessário - Que pena... que terminou dessa maneira!
"The mod javafree deserves, but not the one it needs right now."
--------------------
Não leio nem respondo MPs!
This posting is provided AS IS with no warranties and confers no rights.
greguiPosts:54
Para resolver isso vc terá que fazer vários testes!
entre elas, executar cada thread separadamente, para ver se uma delas está demorando, ou apenas iniciar o processo de cada thread separadamente.
Outra coisa é fazer um log de tempo que cada thread, para poder saber onde é que o processo fica lento!
e também verificar conexão com banco, consultas e até conexão com internet, já que vc informou que o processo acessa urls.
só depois disso vc irá saber onde está o problema!
_________________Gregui Shigunov
http://gregui-shigunov.blogspot.com
A dúvida é o princípio da sabedoria!!!
Relacionados
CONTANDO UM POUCO DA MINHA HISTÓRIA DE VIDA...
http://javafree.uol.com.br/topic-891094-CONTANDO-UM-POUCO-DA-MINHA-HISTORIA-DE-VIDA.html
Gravar audio streaming
http://javafree.uol.com.br/topic-891090-Gravar-audio-streaming.html
botao proximo registro em jsf
http://javafree.uol.com.br/topic-891051-botao-proximo-registro-em-jsf.html
Validar login no Active Diretory via LDAP
http://javafree.uol.com.br/topic-868353-Validar-login-no-Active-Diretory-via-LDAP.html
paginacao sob demanda em jsf
http://javafree.uol.com.br/topic-891082-paginacao-sob-demanda-em-jsf.html