자바 병렬 스트림이란 무엇일까?
멀티쓰레드 프로그래밍을 쉽게해줌
개발자가 쓰레드나 쓰레드풀을 생성할 필요없이 paraleldstream을 사용하기만 하면 된다.
하나의 태스크를 효율적으로 처리하기 위해 쓰레드를 생성해도 되고, 자바 병렬스트림 기법을 활용해도 된다.
일단 예시로 쓰레드를 사용하여 처리한다고 가정했을 시
public class MyTask extends Thread {
@Override
public void run() {
// 병렬로 처리할 작업
System.out.println("Task executed by: " + Thread.currentThread().getName());
}
public static void main(String[] args) {
MyTask task1 = new MyTask();
MyTask task2 = new MyTask();
task1.start(); // 새로운 스레드에서 실행
task2.start(); // 새로운 스레드에서 실행
}
}
이렇게 코드를 사용할 수 있다.
쓰레드를 사용하면 개발자가 직접 쓰레드풀을 제어하고 몇개를 생성할지 선언할 수 있다.
- 장점:
- 복잡한 작업을 세밀하게 제어할 수 있음.
- 작업 단위와 스레드의 상호작용을 개발자가 원하는 대로 조정 가능.
- 단점:
- 코드 복잡성 증가: 스레드를 직접 관리하기 때문에 코드가 복잡해지며, 동기화나 오류 처리에 신경을 써야 한다.
- 버그 위험성: 교착 상태, 경쟁 상태(race condition) 등 멀티스레딩 관련 문제가 발생할 가능성이 높다.
그럼 이제 쓰레드와 다르게 자바 병렬 스트림을 사용하는 예제 코드를 한번 보자
import java.util.Arrays;
public class ParallelStreamExample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Arrays.stream(numbers)
.parallel() // 병렬 스트림으로 전환
.forEach(num -> System.out.println("Processed by: " + Thread.currentThread().getName() + " Value: " + num));
}
}
자바 병렬스트림은 내부적으로 Fork/Join 프레임워크를 사용하여 분할정복 알고리즘과 같은 매커니즘으로 동작한다.
하지만 쓰래드를 사용자가 직접 관리하지 않아도 되어 쓰레드보다 사용하기 간편하다.
하지만 쓰레드 수, 쓰레드 동기화는 설정이 불가능 하여 복잡한 작업 환경에서는 병렬스트림을 사용하는 것이 불리하다.
결론
- 쓰레드를 사용하면 더 많은 유연성과 제어를 제공하지만, 복잡도가 높아지고 오류 가능성도 커진다.
- 병렬 스트림은 간단한 코드로 병렬 처리를 쉽게 구현할 수 있지만, 복잡한 제어가 필요한 경우에는 적합하지 않다.
'CS' 카테고리의 다른 글
자바 클래스와 객체의 차이. 생성자가 왜 필요할까? (1) | 2024.10.13 |
---|---|
쓰레드와 프로세스에 대한 자세한 설명 (0) | 2024.10.02 |
추상클래스 인터페이스 차이점에 대하여 (0) | 2024.10.02 |
스프링에서 Bean 이란? (1) | 2024.10.01 |
리눅스 기초 지식 - 커널에 대하여 (0) | 2023.12.03 |