-
stream vs parallelStream개발/java 2021. 12. 30. 23:01
자바8 에서는 데이터 리스트를 스트림을 통해 계산을 할 수 있습니다.
그런데 이중 parallelStream이라는 것도 같이 제공을 하고 있습니다.
단어의 의미만봐도 알수 있는데 병렬처리를 할 수 잇는 스트림입니다.
예를 들어 과일 중 사과만 추출하는 기능을 스트림을 통해 리스트를 받아온다고 가정을 해보겠습니다.
1.스트림이용
fruits.stream().filter( fruit -> "apple".equals(fruit.getName())).collect(Collectors.toList());
그럴때 parallelStream을 이용하면 추출의 기능을 CPU가 분할하여 수행을 하며 추후 이를 특정 CPU에서 합산하여 데이터를 추출합니다.
2.페러럴스트림이용
fruits.parallelStream().filter( fruit -> "apple".equals(fruit.getName())).collect(Collectors.toList());
말로 들었을때는 Stream()보다 parallelStream을 쓰는게 무조건 이득처럼 보입니다.
그러나 parallelStream에는 몇가지 특징이 있습니다.
순서를 보장하지 않는다. 해당 애플리케이션이 구동되는 스펙에 따라 스레드 수가 결정된다. 분할하고 취합하는 과정에서 발생하는 오버헤드 , 스위칭 등을 고려한 연산을 한다. 그래서 사용에 있어 무조건적으로 parallelStream을 쓰기에는 문제가 있습니다.
그래서 연산이라함이 생각보다 시간이 소모됨에 따라 작은 규모의 데이터를 처리하는 경우에는 일반 stream보다 훨씬 느린 속도를 제공합니다.
그래서 작업을 하시는데 있어 parallelStream사용에 있어서는 무조건 병렬이라 좋다고 받아들이기보다는
해당 작업이 순서에 상관이 없는지 혹은 계산하는 양이 적은지 등을 테스트를 한 후 작업을 하시는게 맞다고 생각합니다.
'개발 > java' 카테고리의 다른 글
익명클래스 실용편 (0) 2022.01.01 익명클래스 (1) 2022.01.01 초기화블록 (0) 2021.12.25 Builder 패턴 활용기 (0) 2021.12.25 Stream.of vs Arrays.stream (0) 2021.12.23