Ajuda com Threads

5 respostas
Hebertbc

Bom dia,
Estava pensando se é possivel fazer a seguinte parada:

Tenho uma thread (A) que le uma lista de arquivos, para cada arquivo ele processa sua linhas, seria possivel eu criar uma thread (B) para processar 1 arquivo com uma thread © que processe 1 linha. Exemplo:

Tenho 10 arquivos com 20 linhas cada, na thread(A) principal seriam criadas 10 threads(B) e cada uma dessas criariam 20 threads©, processando tudo ao mesmo tempo.

É possivel fazer esse rolo? alguma dica?

EDIT:
Tava me esquecendo, para cada thread(B) tenho que salvar o retorno das threads© em um arquivo.

Obrigado pela atenção pessoal.

5 Respostas

rdgms

Tem como você criar um atributo de referencia com o metodo get e set sincronizado… ai você pode pegar o valor desse atributo (ultimo indice) e ai … é logica…

M

Hebertbc, fazer tem. O rdgms já até deu uma dica.
Mas acho que não seria uma boa idéia na prática. Eu não sei quanto tempo dura o processamento da sua linha, mas se você abrir esse monte de threads, o gargalo vai ser o IO de arquivo e isso fica pro sistema operacional. Então, suas threads vão ficar bloqueando toda hora pra esperar a leitura e escrita de arquivo enquanto outras threads ganham a vez. Provavelmente o desempenho vai ser pior do que se você fizer em uma ou duas threads, a menos que os seus arquivos estejam espalhados em file systems diferentes, o que eu imagino que não seja o caso.

Se seu objetivo for aumentar o desempenho e o processamento da sua linha é lento, o que eu recomendaria é que você tivesse uma thread principal para ler os arquivos e outras para o processamento da linha.

Mas tudo isso vai depender de todos de diversos aspectos (tamanho dos arquivos, tempo de processamento da linha, file system, etc)

Hebertbc

Ja tinha pensado nisso… ai o que fiz… cada arquivo carrego linha a linha em um List… a linha não é extensa deve ter uns 50 caracteres no maximo… o tempo de processamento é entre 0.1s a 6s… por isso quero processar tudo ao mesmo tempo…

Imagina um arquivo com 1000 linhas (1000x6) no pior tempo 6000s - 100m - 1h40, sendo que mesmo que processe tudo ao mesmo tempo e demore 5~10min para todas threads finalizarem … continua compensando

M

Esse é o meu ponto: se você abrir uma thread por arquivo e depois mais uma por linha, eu não acredito que o So vai conseguir processar tudo ao mesmo tempo, porque as thread vão se bloquear no IO.

Você pode fazer os testes e nos dizer depois (vai ser uma métrica interessante), mas eu acho que você não vai reduzir muito o tempo de processamento, ao custo de uma implementação muito mais complexa.

Mas tenta e aí e compartilha o resultado com a gente!

Hebertbc

correto… segunda feira finalizo… faço os testes e posto os resultados…

Criado 28 de maio de 2010
Ultima resposta 29 de mai. de 2010
Respostas 5
Participantes 3