Middle
Миллиард санды камтылган чоң массивдин элементтеринин жыйнагын эсептөө үчүн асинхронду колдонуу керекпи?
sobes.tech AI
AIден жооп
Bəli, milyardlarla saydan ibarət böyük massiv elementlərinin cəm hesablanması üçün asinxronluğun tətbiqi haqlıdır. Belə bir vəzifə yaxşı paralelləşdirilə bilər, çünki cəm assosiativ əməliyyatdır.
Massivi bir neçə hissəyə bölüb, hər bir hissənin cəmını paralel şəkildə hesablamaq olar, məsələn, C#-da Task və ya Parallel.For istifadə etməklə:
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
long[] largeArray = new long[1_000_000_000];
// Massivin başlanğıc dəyərini təyin edin...
int processorCount = Environment.ProcessorCount;
long[] partialSums = new long[processorCount];
Parallel.For(0, processorCount, i =>
{
int start = i * largeArray.Length / processorCount;
int end = (i + 1) * largeArray.Length / processorCount;
long sum = 0;
for (int j = start; j < end; j++)
sum += largeArray[j];
partialSums[i] = sum;
});
long totalSum = 0;
foreach (var sum in partialSums)
totalSum += sum;
Console.WriteLine($"Ümumi cəm: {totalSum}");
}
}
Bu yanaşma, bütün mövcud CPU nüvələrindən istifadə etməklə hesablamanı əhəmiyyətli dərəcədə sürətləndirəcək.