Я читал о новых возможностях Java 8, и одним из них был новый метод Arrays.parallelSort(). Я сделал несколько тестов, сортируя массив двойников и один из строк, а для строк - параллельный сорт был намного медленнее.Параллельная сортировка медленнее, чем серийная сортировка
Вот содержание метода испытаний для струнных:
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));
Результат был:
Arrays.sort: totalTimeInMicro= 11993
Arrays.parallelSort: totalTimeInMicro= 89823
Я также попробовал этот код на другом компьютере а результат был таким же (25608 против 808660). Компьютер, на котором я запускаю тесты, имеет процессор i5-2500. У вас есть идея, почему я получаю такие результаты?
Возможно, из-за накладных расходов на создание потоков. Попробуйте сортировать еще большие массивы: возможно, существует размер массива, для которого параллельная сортировка выполняется быстрее. – juhist
Сроки одного вызова (даже не нарастания) не расскажут вам много. – biziclop
1. Вы должны выполнить разминку перед выполнением любой микро-маркировки. 2. 'Arrays.parallelSort()' использует 'fork-join' framework. Таким образом, это напрямую связано с количеством ядер в системе (следовательно, это * зависит от архитектуры *). i-5 имеет 4 ядра, поэтому идеально «параллельная сортировка» должна быть быстрее. – TheLostMind