Estou lendo um arquivo com estrutura abaixo, e depois o quebro em vários conjuntos de registros, onde terei threads para atuarem com estes conjuntos.
Arquivo:
André da Silva Av. Pio XII, 334 055-21 36652012MCSP
Andrey dos Santos R. Pe. Manoel 112 055-21 36632112MSSP
Antonio Matos R.Mario da Cunha 456 055-21 33452212MCSP
A questão é que eu gostaria de trabalhar de uma forma dinâmica, pois através de números “mágicos” eu consigo resultados diferentes, e o meu objetivo é realizar as operações no menor tempo possível variando apenas a quantidade de threads ou quantidade de registros por thread, porem posso estar lendo um arquivo com 1milhão de registros ou 600 registros:
Aí é que eu pergunto:
1 -Tem como eu saber a quantidade de linhas (registros) do arquivo sem precisar lêr e contabilizar?
2 -Existe uma fórmula que me diga como balencear estes números?
resultados obtidos pelas variações de variáveis:
[size=9]1)registros= 30.000 - threads=10 - buffer=1000 - tempo= 29seg.
2)registros= 30.000 - threads=20 - buffer=1000 - tempo= 47seg.
3)registros= 50.000 - threads=10 - buffer=1000 - tempo= 43seg.
4)registros= 50.000 - threads=20 - buffer=1500 - tempo= 31seg.
5)registros= 250.000 - threads=20 - buffer=1500 - tempo= 15 minutos. ??? (para esta situação as 20 threads e os 1500 registros por thread não foram satisfatórios, pois pela lógica devera ser 5x maior que o exemplo 4[/size]
BufferedReader reader = new BufferedReader(new FileReader(arquivo));
while(reader.ready()){
//limita a quantidade de Threads
if(Thread.activeCount()<qtdeThreads) {
String[] registros = new String[buffer];
//faço um for para popular os registros[i] com as linhas do arquivo, limitado ao tamanho do buffer
}
//Instancio uma thread para processar a lista de registros
Thread thread = new Thread(new Processa(registros));
thread.start();
}
}
