I'm getting much worse performance when I use list.parallelStream()
than when I use list.stream()
.
Why do you think this is happening? This is Java 17 BTW, and my CPU is i5 of desktop class.
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Period;
import java.time.chrono.ChronoPeriod;
import java.time.chrono.HijrahChronology;
import java.time.chrono.HijrahDate;
import java.time.chrono.IsoChronology;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class App {
public static void main(String[] args) throws Exception {
int size = 1;
List<Integer> list = null;
long startTimeN;
long endTimeN;
long startTimeP;
long endTimeP;
long normalStreamCheckedSize;
long normalStreamTime;
long parallelStreamCheckedSize;
long parallelStreamTime;
for (int i = 1; i <= 1_000_000; i *= 10) {
Random rand = new Random();
size = i;
list = Stream.generate(() -> {
return rand.nextInt(10);
}).limit(size).collect(Collectors.toList());
startTimeN = System.currentTimeMillis();
normalStreamCheckedSize = list.stream().count();
endTimeN = System.currentTimeMillis();
normalStreamTime = endTimeN - startTimeN;
startTimeP = System.currentTimeMillis();
parallelStreamCheckedSize = ist.parallelStream().count();
endTimeP = System.currentTimeMillis();
parallelStreamTime = endTimeP - startTimeP;
System.out.println("Size: " + size);
System.out.println("Normal time:" + normalStreamTime);
System.out.println("Parallel time:" + parallelStreamTime
+ "\n=====");
}
}
}