나만의 개발 로그 | 고민 로그
23.02.03 TIL 본문
☑️ 스트림
| 항목 | 한줄 요약 |
| 단일 사용 | 스트림은 한 번 소비하면 재사용 불가 → 다시 collection.stream() 으로 새로 뽑기 |
| 병렬 처리(parallelStream) | Fork/Join 풀을 이용해 여러 스레드로 데이터 작업 |
| 병렬이 항상 빠른 건 아님 | 요소 개수가 적거나, 요소당 작업이 짧으면 오히려 오버헤드 ↑ |
☑️ parallelStream() 언제 이득일까?
| 체크 리스트 | 설명 |
| 데이터 량 | 수만 건 이상일 때 배치 효과가 뚜렷 |
| 콜렉션 유형 | ArrayList, IntStream.range() 처럼 인덱스 분할이 쉬운 구조 -> HashSet, LinkedList 는 분해·결합 비용 커서 역효과(분할(Fork) → 병렬 실행 → 결합(Join) 하는 구조이기 때문) |
🔍 System.nanoTime() 으로 직렬 vs 병렬 소요 시간을 재 본 뒤 결정하기.
long t1 = System.nanoTime();
list.stream().map(this::work).toList();
long t2 = System.nanoTime();
long t3 = System.nanoTime();
list.parallelStream().map(this::work).toList();
long t4 = System.nanoTime();
System.out.printf("직렬: %d ms, 병렬: %d ms%n", (t2 - t1) / 1_000_000, (t4 - t3) / 1_000_000);
'TIL&WIL' 카테고리의 다른 글
| 23.02.08 TIL (0) | 2023.02.09 |
|---|---|
| 23.02.06 TIL (0) | 2023.02.07 |
| 23.02.01 TIL (1) | 2023.02.02 |
| 23.01.31 TIL (0) | 2023.02.01 |
| 23.01.30 TIL (2) | 2023.01.31 |
Comments