Stavo leggendo delle nuove funzionalità in Java 8 e uno di questi era il nuovo metodo Arrays.parallelSort(). Ho fatto alcuni test ordinando una serie di doppi e una di stringhe e per le stringhe il parallelSort era molto più lento.Ordinamento parallelo più lento di tipo seriale
Ecco il contenuto di un metodo di prova per archi:
final int size = 10000;
final String[] values1 = new String[size];
final String[] values2 = new String[size];
for (int i = 0; i < size; i++) {
values1[i] = Integer.toString(i);
values2[i] = values1[i];
}
Collections.shuffle(Arrays.asList(values1));
Collections.shuffle(Arrays.asList(values2));
final Comparator<String> comparator = (o1, o2) -> o2.compareTo(o1);
long startTimeInNano = System.nanoTime();
Arrays.sort(values1, comparator);
long endTimeInNano = System.nanoTime();
System.out.println("Arrays.sort: totalTimeInMicro= " + ((endTimeInNano - startTimeInNano)/1000));
//parallel sort with java 8
startTimeInNano = System.nanoTime();
Arrays.parallelSort(values2,comparator);
endTimeInNano = System.nanoTime();
System.out.println("Arrays.parallelSort: totalTimeInMicro= " + ((endTimeInNano - startTimeInNano)/1000));
Il risultato è stato:
Arrays.sort: totalTimeInMicro= 11993
Arrays.parallelSort: totalTimeInMicro= 89823
Ho provato anche questo codice su un altro computer e la il risultato è stato lo stesso (25608 vs 808660). Il computer su cui eseguo i test ha una CPU i5-2500. Hai idea del perché ottengo questo tipo di risultati?
Potrebbe essere dovuto al sovraccarico di creazione del thread. Prova a ordinare array ancora più grandi: potrebbe essere possibile che ci sia una dimensione di matrice per la quale l'ordinamento parallelo è più veloce. – juhist
Il cronometraggio di una singola invocazione (senza nemmeno un'impennata) non ti dirà molto. – biziclop
1. È necessario eseguire una sessione di riscaldamento prima di eseguire qualsiasi micro-tracciatura da banco. 2. 'Arrays.parallelSort()' usa il framework 'fork-join'. Quindi è direttamente correlato al numero di core su un sistema (quindi è * dipendente dall'architettura *). i-5 ha 4 core, quindi idealmente 'parallelo sort 'dovrebbe essere più veloce. – TheLostMind