병렬성(Parallelism)은 여러 작업을 동시에 실행하여 성능을 향상시키는 개념입니다.
멀티코어 프로세서나 분산 시스템을 활용해 작업을 분리하고 병렬적으로 처리함으로써 작업 시간을 단축할 수 있습니다.
멀티코어 프로세서
스레드 분할
분산 처리
Fork/Join Framework는 작업을 작은 단위로 나누고 여러 스레드에서 병렬적으로 처리합니다.
import java.util.concurrent.RecursiveTask;
import java.util.concurrent.ForkJoinPool;
class SumTask extends RecursiveTask<Long> {
private final int[] numbers;
private final int start, end;
private static final int THRESHOLD = 10;
public SumTask(int[] numbers, int start, int end) {
this.numbers = numbers;
this.start = start;
this.end = end;
}
@Override
protected Long compute() {
if (end - start <= THRESHOLD) {
long sum = 0;
for (int i = start; i < end; i++) {
sum += numbers[i];
}
return sum;
}
int mid = (start + end) / 2;
SumTask leftTask = new SumTask(numbers, start, mid);
SumTask rightTask = new SumTask(numbers, mid, end);
leftTask.fork();
long rightResult = rightTask.compute();
long leftResult = leftTask.join();
return leftResult + rightResult;
}
}
public class Main {
public static void main(String[] args) {
int[] numbers = new int[100];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = i + 1;
}
ForkJoinPool pool = new ForkJoinPool();
SumTask task = new SumTask(numbers, 0, numbers.length);
long result = pool.invoke(task);
System.out.println("Sum: " + result);
}
}
Sum: 5050
멀티스레딩(Multithreading)
Thread, ExecutorService 활용 분산 처리 프레임워크
GPU 병렬 처리
병렬 처리는 대규모 데이터를 효율적으로 처리하고 성능을 극대화할 수 있는 중요한 기술입니다.
Java에서 제공하는 병렬 처리 도구(Fork/Join Framework 등)를 사용하며 병렬 프로그래밍의 강력함과 함께 복잡성을 느낄 수 있었습니다.
병렬성 구현 시 성능과 정확성 간의 트레이드오프를 이해하고 적절한 동기화 및 설계를 통해 안정적인 병렬 처리를 구현해야 한다는 점을 배웠습니다.