Я измеряю производительность с помощью примера кода в конце.
Если я вызываю метод checkPerformanceResult с параметром numberOfTimes, установленным в 100, параллельный поток превосходит значимый последовательный поток (sequential =346, параллельный = 78).
Если я установлю параметр на 1000, последовательный поток значительно превосходит параллельный поток (последовательный = 3239, параллельный = 9337).
Я сделал многоработает и результат тот же.
Может кто-нибудь объяснить мне это поведение и что здесь происходит под капотом?
public class ParallelStreamExample {
public static long checkPerformanceResult(Supplier<Integer> s, int numberOfTimes) {
long startTime = System.currentTimeMillis();
for(int i = 0; i < numberOfTimes; i++) {
s.get();
}
long endTime = System.currentTimeMillis();
return endTime - startTime;
}
public static int sumSequentialStreamThread() {
IntStream.rangeClosed(1, 10000000).sum();
return 0;
}
public static int sumParallelStreamThread() {
IntStream.rangeClosed(1, 10000000)
.parallel().sum();
return 0;
}
public static void main(String[] args) {
System.out.println(checkPerformanceResult(ParallelStreamExample::sumSequentialStreamThread, 1000));
System.out.println("break");
System.out.println(checkPerformanceResult(ParallelStreamExample::sumParallelStreamThread, 1000));
}
}