Как можно вычислить сумму очень большого массива одновременно, разделив на несколько CompletableFuture
и попытавшись вычислить их результат асинхронно.
Для моей простой программы-примера я использую длину массива = 4 и делю на 2 CompletableFuture
, но как я могу сделать процесс динамическим, если размер массива исчисляется миллионами? В идеале хотелось бы, чтобы процессор был занят, и они должны продолжать давать свой результат, как только он будет завершен, чтобы глобальная сумма возвращалась как можно скорее.
public class Parallelism {
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4};
//sum = 10
int n = arr.length;
CompletableFuture<Integer> first = CompletableFuture.supplyAsync(() -> {
return sum(arr, 0, 1);
});
CompletableFuture<Integer> second = CompletableFuture.supplyAsync(() -> {
return sum(arr, 2, n-1);
});
int sum = 0;
sum += first.join();
sum += second.join();
assert sum == 10;
}
private static int sum(int[] arr, int start, int end) {
int sum = 0;
for(int i = start; i <= end; i++) {
sum += arr[i];
}
return sum;
}
}