https://dev.java/learn/api/streams/parallel-streams/
스트림을 병렬로 처리하는 가장 단순한 방법은 pararllel() 을 이용하는 것임.
int parallelSum =
IntStream.range(0, 10)
.parallel()
.sum();
IO.println("Sum = " + parallelSum);
하지만 병렬 스트림이 항상 정답은 아님. 쓰기 전에 다음을 물어보자.
만약 사용하기로 했다면, 병렬스트림 사용후 성능이 더 나아졌다는걸 최대한 운영환경과 유사한 곳에서 측정해야 한다.
스트림에서 병렬을 지원하는 API는 자바 7부터 추가된 Fork/Join 프레임워크를 기반으로 한다. 골자는 간단하다. 데이터 처리를 여러 재귀적으로 분할해 여러 쓰레드에 나눠주고, 그 결과를 다시 합치는 방식임.
물론 이 과정에 오버헤드가 있으므로 항상 정답은 아니다.
메모리는 1차원이란걸 생각하자.
int[] 배열의 첫 원소를 찾아본다고 해보자. 64바이트짜리 한 라인은 16개의 int 값을 저장할 수 있다. 배열 첫 원소에 접근하는데 캐시미스가 나면 cpu는 해당 라인을 메모리에서 불러와서 캐시에 올린다.