Пример параллельной многопоточной обработки данных в C#

Чтобы продемонстрировать насколько элегантно С# позволяет организовать параллельные вычисления, реализуем классическую задачу поиска простых чисел в заданном диапазоне множества натуральных чисел.

Для начала, я создам функцию-расширение для класса целых чисел int, определяющую является ли число простым.

Функция isSimple обернута в статический класс и реализует нужный нам метод проверки, является ли число простым.

Следующим шагом создадим класс-источник целых чисел. Его особенностью является использование конструкции yield при создании списка, что позволит нам не развертывать весь массив тестируемых чисел одномоментно в памяти, а выдавать их по требованию программы.

Для инициализации массива мы передаём верхнюю планку — MaxValue. Т.е. массив состоит из чисел [2 … MaxValue — 1].

На данном этапе мы подготовили массив и функцию, которая выполняет независимые вычисления с отдельным элементом этого массива. Т.е. есть все необходимые условия, чтобы по возможности использовать параллельные вычисления.

Одно-поточный вариант

Далее посмотрим как выглядит код, выполняющий вычисления в одном потоке, чтобы впоследствии сравнить с много-поточной версией кода.

Для одно-поточной версии сортировка является лишней, т.к. числа поставляются итак в нужном порядке. Сортировка пригодится в многопоточной версии.

Параллельные вычисления

Сравните код показанный ранее со следующим:

Мощное расширение AsParallel() в пространстве имен System.Linq прячет от нас все технические особенности того, как наш код превращается в многопоточный.

Написать комментарий

Мало букафф? Читайте есчо !

Использование canvas на C# Xamarin

Июль 3, 2022 г.

Это часть статьи по опыту создания приложения с использованием C# Xamarin для Android платформы. Canvas - это общий для разных платформ подход к работе с графикой, он обычно материализуется в специфичном для языка / платформы объекте, который так и ...

Читать

Сохранение данных приложения в C# Xamarin (Android)

Июль 17, 2022 г.

В самом простом случае нужно обеспечить функциональность на уровне хеш массива, т.е. работу с парами ключ + значение. В Xamarin данный функционал инкапсулирован в статический класс Preferences. В рамках вашего Android приложения вы можете выполнять ...

Читать

 

Комментарии к «Пример параллельной многопоточной обработки данных в C#»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: