티스토리 뷰

Java/Effective Java

[Item48] 병렬화 주의

ryumodern 2022. 4. 16. 19:53

Item48에서는 스트림 병렬화를 주의하라 말한다

병렬화란 단어에는 엄청난 성능 효과가 있을 것 같은 느낌이 든다

특히 자바는 컬렉션 등의 데이터 소스에 stream() 대신 parallelStream()으로 간단하게 병렬로 만들 수 있는 것이 함정이다

왜 함정인고 하니 병렬 스트림은 순차 스트림 보다 빠른 경우가 드물고 더 느린 경우가 많다

 

개념적으로 쉽게 와닿지 않을 수 있다

하나의 스레드가 큰 뭉탱이 하나 처리하는 것이 어떻게 여러 스레드가 작은 뭉탱이를 처리하는 것보다 느릴 수 있을까?

그 이유는 이전 글 Item45에 간략하게 정리해뒀다

 

[Item45] Stream vs For-Loop

Item45에서 스트림은 주의해서 사용하라 말한다 Stream API는 다량의 데이터 처리 작업을 돕고자 Java8부터 추가되었고 짜잘한 for, if문을 스트림으로 대체할 수 있다 Stream API의 핵심은 책을 참고해보

ryumodrn.tistory.com

 

병렬화 스트림은 언제 사용해도 되는가?

  • 데이터 소스의 순서와 독립적인 경우
  • 데이터 소스에 특정 연산을 수행한 후 결과를 모으는 경우
  • 대량의 데이터 소스를 빠르게 반복할 수 있을 때
  • 순차적 스트림의 성능 결과를 알고 있고, 병렬 스트림의 성능이 우세할 것이라 생각되는 경우

이론적 내용은 위와 같고 실무적으로 접근해보면 NQ Model을 참고해 연산 X 데이터 양이 10,000이 넘으면 일단 돌려보자

병렬 스트림을 사용하는 중요 이유는 성능 때문이니 돌려보고 성능 측정을 하자

이에 앞서 고려해볼 점은 굳이 자바에서 빅데이터를 다뤄야 하는가에 대해서다

빅데이터 관련 툴들이 많이 발전된 지금 10,000번 이상의 연산을 자바에서 해야 할까?

간단한 연산이라면 현대의 CPU가 많이 발전했고 서버에서 사용하는 용도라면 성능이 더욱 좋을 테니 별 문제없겠지만

특화된 툴이 있는데 굳이 자바에서 처리해야 하는가 하는 의문이 든다

 

병렬화 스트림을 써본 실전 경험이 거의 전무해서 장점이 쉽게 와닿지가 않는다

최근 자바 병렬 프로그래밍을 읽기 시작했는데 다 읽고 나서 추가 정리를 해봐야겠다

댓글
링크
글 보관함
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Total
Today
Yesterday