Voila, j'ai un grand tableau de double qu'on notera data,
J'applique un traitement lourd sur chaque element du data

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
double[] data;
remplirData();
for(int i=0 ; i<data.length; i++){
double resultat = traitementlourd(data[i]);
}
Afin d'optimiser ce traitement qui dure quelques secondes (15s), j'ai pensé à utiliser le multi-threading, çad diviser le traitement sur plusieurs threads et chaque thread pas s'occuper d'une partie du tableau;

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
ouble[] data;
remplirData();
ExecutorService executor = Executors.newFixedThreadPool(2);
int size = data.length;
TraitementWorker worker1 = new TraitementWorker(0, size / 2);
TraitementWorker worker2 = new TraitementWorker(size /2 +1 ,size - 1);
executor.execute(worker1);
executor.execute(worker2);
executor.shutdown();
Je croyais que ce code va parralléliser les traitements et j'obtiendrai un certain gain de perfs. Mais voilà, les deux threads s'executent chaqune en 15 secondes . Lorsque je lance un seul : 7s

Est-ce que mon raisonnement est faux ou c'est qq chose d'autre ?