Последовательный поток быстрее, чем параллельный поток, если количество итераций увеличивается - PullRequest
1 голос
/ 28 сентября 2019

Я измеряю производительность с помощью примера кода в конце.

Если я вызываю метод 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));
    }
}
...