[Collection] Optimisation d'un traitement multithreads
Bonjour,
voilà j'ai une appli, multithread que j'aimerai optimiser. J'utilise une API propriétaire qui accède au données d'un logiciel (dans une bdd ou par calcul).
j'espère que je vais réussir à etre clair ...:?
Algo actuel :
1. Récupérer des données (objets) avec l'API à partir d'un objet(0)
2. Parcourir cette liste de données (avec un iterator spécifique)
- cast de l'Object dans le bon type
- création d'une instance "threadable" avec cet objet(1)
- ajout de ce thread dans une liste
3. Tous les threads sont créés. On les exécute 4 par 4
4. pour chacun des threads :
- chargement d'objets (2) à partir de l'objet initial (1)
- parcours de ces objets
- écriture des données dans un tableau. Ce tableau est ajouté dans une hasmap. Si l'élément inséré existe déjà (id), on cumule certaine valeurs.
5. Tous les threads sont terminés. On parcours le hasmap pour insérer les données dans une bdd (avec un PreparedStatement)
6. On vide tout et on repart avec un objet (0)
Evolution ?
Je me suis rendu compte que je pouvais charger directement les objets (2) à partir des objets (0)
je voudrais donc :
- charger tous ces objets (2) dans une Collection
- utiliser 4 (ou plus ?) threads pour parcourir cette collection, et remplir la hasmap
- et hop parcourir la hasmap pour insérer les données
Enfin les questions ...
En fait c'est des questions un peu bete je suppose ...
- Quel type de collection est-il préférable d'utiliser ? (je cherche à gagner en performance)
- Quelle est la meilleure manière de gérer le fait de ne pas lire 2 fois des éléments de cette collection?
- Sachant que j'ai 4 procs, quel nombre de threads préconiser ?
Note : je suis en 1.4 mais si le besoin se fait sentir je suppose que je peux passer en 1.5. donc utiliser des pool de threads. (serait-ce conseillé ?)
Bon voilà. ;)
merci à ceux qui ont tout lu
merci à ceux qui ont des réponses à m'apporter ...