병렬처리란?
- 여러 개의 작업을 동시에 수행해서 전체 처리 시간을 단축하는 방법을 말한다
- 주로 멀티코어 프로세서를 활용하여 하나의 작업을 여러 부분으로 나누고 나눈 부분을 동시에 처리하는 방식이다
- 자바에서는 주로 java.util.stream 패키지의 parallel stream이나 java.util.concurrent 패키지의 여러 클래스나 인터페이스를 사용해서 구현한다
장점
- 성능 향상
- 여러 코어를 사용해서 순차적 처리보다 더 빠르게 완료할 수 있다
- 대량의 데이터나 복잡한 계산을 처리할 때 좋다
- 효율적인 자원 활용
- 모든 코어를 효율적으로 사용해서 시스템 자원을 최대한 활용할 수 있다
- 단일 코어에서 작업이 병목 현상을 일으키는 걸 방지한다
- 응답 시간 단축
- 병렬 처리로 작업을 나누어 동시에 처리하면 작업의 응답 시간이 줄어든다
- 스케일링 용이성
- 프로세서나 코어가 더 있으면 작업을 더 분산해서 처리할 수 있다
Java에서 병렬 처리 구현
- 병렬 스트림
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
// 순차 스트림
List sequentialResult = numbers.stream()
.map(n -> n * n)
.toList();
// 병렬 스트림
List parrellResult = numbers.parallelStream()
.map(n -> n * n)
.toList();
```
병렬 처리 시 주의점
- 스레드 안정성
- 여러 스레드가 사용되기 때문에 공유 자원의 스레드 안정성을 보장해야 한다
- 오버헤드
- 병렬 처리가 항상 성능 향상을 보장하지 않는다
- 작업을 분할하고 병합하면서 오버헤드가 발생할 수 있고 작은 작업에서는 오히려 성능이 저하될 수 있다
- 데드락
- 작업 분할
- 균등하게 작업을 분할해야 전체 성능 저하를 피할 수 있다
'TIL > Java & Spring Boot' 카테고리의 다른 글
주입할 스프링 빈이 없어도 동작해야 하는 경우 (0) | 2024.06.03 |
---|---|
@Transactional을 왜 사용하고 어떤 기능이 있나? (0) | 2024.06.02 |
람다 표현식 (1) | 2024.06.02 |
Timestamp와 LocalDateTime 타입 차이 (0) | 2023.09.14 |
묵시적 / 명시적 형 변환 (0) | 2022.08.03 |