스트림 병렬화는 주의해서 적용하라
- 자바 8부터는
parallel
메서드만 한 번 호출하면 파이프라인을 병렬 실행할 수 있는 스트림을 지원했다. - 동시성 프로그래밍을 할 때와 마찬가지로,
parallel
을 사용할 때도 안정성(safety)과 응답 가능(liveness) 상태를 유지하기 위해 애써야 한다. - 스트림 소스가
ArrayList
, hashMap
, HashSet
, ConcurrentashMap
의 인스턴스거나 배열, int 범위, long 범위일 때 병렬화의 효과가 가장 좋다. - 스트림을 잘못 병렬화하면 (응답 불가를 포함해) 성능이 나빠질 뿐만 아니라 결과 자체가 잘못되거나 예상 못한 동작이 발생할 수 있다.
- 병렬화하는 편이 낫다고 믿더라도, 수정 후의 코드가 여전히 정확한지 확인하고 운영 환경과 유사한 조건에서 수행해보며 성능지표를 유심히 간찰하라.
- 계산도 정확하고 성능도 좋아졌음이 확실해졌을 때, 오직 그럴때만 병렬화 버전 코드를 운영 코드에 반영하라!