Junior — Middle
ForkJoinPool kullanarak dizi öğelerinin toplamını paralel hesaplamayı gerçekleştirmek için hangi yöntemler kullanılabilir?
sobes.tech yapay zeka
AI'dan gelen yanıt
ForkJoinPool kullanarak dizinin elemanlarının toplamını paralel hesaplamak için, diziyi parçalara ayırıp bunları paralel olarak toplayan rekürsif bir görev uygulayabilirsiniz.
Ana fikir:
- Alt dizinin boyutu küçükse, toplamı doğrudan hesaplayın.
- Aksi takdirde, alt diziyi ikiye bölün, iki alt görevi oluşturun, bunları paralel olarak çalıştırın ve sonuçları birleştirin.
Java'da RecursiveTask<Integer> kullanarak örnek:
import java.util.concurrent.*;
public class SumTask extends RecursiveTask<Integer> {
private static final int THRESHOLD = 1000;
private int[] array;
private int start, end;
public SumTask(int[] array, int start, int end) {
this.array = array;
this.start = start;
this.end = end;
}
@Override
protected Integer compute() {
int length = end - start;
if (length <= THRESHOLD) {
int sum = 0;
for (int i = start; i < end; i++) {
sum += array[i];
}
return sum;
} else {
int mid = start + length / 2;
SumTask leftTask = new SumTask(array, start, mid);
SumTask rightTask = new SumTask(array, mid, end);
leftTask.fork(); // sol görev asenkron başlatılır
int rightResult = rightTask.compute(); // sağ görev mevcut thread'da hesaplanır
int leftResult = leftTask.join(); // sol görevin sonucu beklenir
return leftResult + rightResult;
}
}
}
// Kullanım:
// ForkJoinPool pool = new ForkJoinPool();
// int[] data = ...;
// int totalSum = pool.invoke(new SumTask(data, 0, data.length));
Bu yaklaşım, büyük dizilerin toplamını hızlandırmak için çok iş parçacıklı kullanımı verimli şekilde kullanır.