SeouliteLab

[Java/자바] ForkJoinPool을 활용한 병렬 프로그래밍 본문

프로그래밍

[Java/자바] ForkJoinPool을 활용한 병렬 프로그래밍

Seoulite Lab 2024. 3. 15. 09:39

Java에서 병렬 프로그래밍을 구현할 때 ForkJoinPool을 사용할 수 있습니다. 이번 포스트에서는 ForkJoinPool을 소개하고, 간단한 예제를 통해 병렬 작업을 어떻게 수행하는지 살펴보겠습니다.

1. ForkJoinPool 소개

ForkJoinPool은 Java 7에서 도입된 프레임워크로, 분할 정복 알고리즘을 구현하는 데 사용됩니다. ForkJoinPool은 작업을 작은 작업으로 분할하고, 각각의 작업을 병렬로 실행하여 병렬성을 높이는 역할을 합니다.

2. ForkJoinPool 예제

아래 예제에서는 ForkJoinPool을 사용하여 배열의 합을 계산하는 간단한 예제를 살펴봅니다.

예제:

import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;

public class SumCalculator extends RecursiveTask<Long> {
    private final long[] numbers;
    private final int start;
    private final int end;

    public SumCalculator(long[] numbers, int start, int end) {
        this.numbers = numbers;
        this.start = start;
        this.end = end;
    }

    @Override
    protected Long compute() {
        if (end - start <= 1000) {
            long sum = 0;
            for (int i = start; i < end; i++) {
                sum += numbers[i];
            }
            return sum;
        } else {
            int mid = (start + end) / 2;
            SumCalculator leftTask = new SumCalculator(numbers, start, mid);
            SumCalculator rightTask = new SumCalculator(numbers, mid, end);
            leftTask.fork();
            return rightTask.compute() + leftTask.join();
        }
    }

    public static void main(String[] args) {
        long[] numbers = new long[10_000];
        for (int i = 0; i < numbers.length; i++) {
            numbers[i] = i + 1;
        }

        ForkJoinPool forkJoinPool = new ForkJoinPool();
        long sum = forkJoinPool.invoke(new SumCalculator(numbers, 0, numbers.length));
        System.out.println("Sum: " + sum);
    }
}

3. 결론

ForkJoinPool을 사용하면 병렬 프로그래밍을 쉽게 구현할 수 있습니다. 작업을 작은 단위로 분할하여 병렬로 처리함으로써 성능을 향상시킬 수 있습니다.

위의 예제를 통해 Java에서 ForkJoinPool을 활용하여 병렬 프로그래밍을 수행하는 방법을 알아보았습니다.