Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- javascript type
- webstorm
- Intellij
- JetBrains
- ES6
- 이펙티브자바
- spring batch #스프링 배치 #스프링 배치 중복 실행
- Spring Session
- effectivejava
- javascript
- spring security
- 이펙티브 자바
- Redis
- Spring
- Effective Java
- Babel
- requestbody
- you don't know js
- javascript value
- webpack
- 자바
- 자바스크립트
- nodeJS
- javascript 값
- java
- CAS
- javascript native
- java.util.LinkedHashMap cannot be cast
- javascript 기초
- ECMA2015
Archives
- Today
- Total
귀찮지만 만들어보자
이펙티브 자바 - 람다와 스트림(7) 본문
스트림 병렬화는 주의해서 사용하라
자바5에서는 concurrent 라이브러리, executor 프레임워크
자바7에서는 fork / join 그리고
자바8에서는 parallel로 벙렬 프로그래밍을 지원한다.
사용하는 것은 간단하게 메서드를 호출하는 것으로 가능하지만,
제약 사항이 많고 올바르게 사용하기에는 제약사항이 많다.
parallel로 성능개선을 할 수 없는 경우
- 데이터 소스가 Stream.iterate 인 경우
- 중간 연산에 limit를 사용하는 경우
- 스틀팀의 소스가 LinkedList와 같이 꼬리를 물고 있는 경우
일반적으로 parallel을 사용해서 성능개선을 할 수 있는 경우
- 스트림의 소스가 ArrayList, HashMap, HashSet, ConcurrentHashMap, 배열, int 범위, long 범위
전술한 자료구조의 특징
- 데이터를 원하는 크기로 정확하고 손쉽게 나눌수 있어서 다수의 스레드에 분배하기 좋음
- 이웃한 원소의 참조들이 메모리에 연속해서 저장되어 있음. 즉 참조 지역성이 뛰어남
스트림의 종단 연산 중 병렬처리에 가장 적합한 것은 축소(reduce) 이다
반면 가변 축소(mutable reduce)는 병렬화에 적합하지 않다 ex) collect
가변 축소는 컬렉션을 합치는 부담이 크기 때문이다
스트림을 잘못 병렬화하면 성능이 나빠질뿐만 아니라 결과 자체가 잘못되거나,
예상 못한 동작이 발생할 수 있다
그래서 테스트가 반드시 필요하다
'이펙티브 자바' 카테고리의 다른 글
이펙티브 자바 - 메서드(2) (0) | 2019.01.27 |
---|---|
이펙티브 자바 - 메서드(1) (0) | 2019.01.27 |
이펙티브 자바 - 람다와 스트림(6) (0) | 2019.01.19 |
이펙티브 자바 - 람다와 스트림(5) (0) | 2019.01.19 |
이펙티브 자바 - 람다와 스트림(4) (0) | 2019.01.13 |