La lecture et l'écriture de plusieurs fichiers en parallèle

J'ai besoin d'écrire un programme en Java qui va lire un nombre relativement important (~50 000 habitants) des fichiers dans une arborescence de répertoires, de traiter les données de sortie et les données traitées dans un document distinct (plat) répertoire.

Actuellement, j'ai quelque chose comme ceci:

private void crawlDirectoyAndProcessFiles(File directory) {
  for (File file : directory.listFiles()) {
    if (file.isDirectory()) {
      crawlDirectoyAndProcessFiles(file);
    } else { 
      Data d = readFile(file);
      ProcessedData p = d.process();
      writeFile(p,file.getAbsolutePath(),outputDir);
    }
  }
}

Il suffit de dire que chacune de ces méthodes est enlevé et ramené pour en faciliter la lecture, mais ils fonctionnent tous très bien. L'ensemble du processus fonctionne bien, sauf qu'il est lent. Le traitement des données se fait par l'intermédiaire d'un service à distance et prend entre 5 et 15 secondes. Multipliez-le par de 50 000...

Je n'ai jamais fait quoi que ce soit multi-thread avant, mais je me dis que je peux obtenir une assez bonne vitesse augmente, si je ne. Quelqu'un peut-il donner quelques conseils sur comment je peux paralléliser cette méthode?

Quelle est la taille des fichiers et la façon intensive est le traitement? Je demande parce que si il n'y a plus de temps passé à lire les fichiers à partir du disque, alors vous n'allez pas gagner beaucoup avec filetage.
Vous n'êtes pas susceptible d'obtenir toute accélération de parallélisation d'une tâche qui est presque certain d'être disque. Sauf si vous essayez de paralléliser les répertoires qui sont sur différents disques physiques...
Faites-vous la sortie vers un fichier ou sur un fichier par fichier ?
Les fichiers sont des fichiers d'images de différentes tailles (de quelques ko à quelques mo) . Le traitement prend la part du lion du moment cependant. La production est actuellement à plusieurs fichiers (un pour chaque fichier traité, dans un format de texte), mais je voudrais aussi idéalement que d'écrire quelque chose pour chaque entrée dans un fichier journal. L'ordre n'est pas important.

OriginalL'auteur Trasvi | 2012-01-05