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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Переключение страниц в приложении C# Xamarin (Android)

Июль 4, 2022 г.

Даже самое простое приложение содержит несколько страниц. Минимально - это основная страница и страница с настройками. В данной статье я покажу пример как реализовать переключение между страницами с помощью класса NavigationPage. Цикл статей по Xamarin ...

Читать

Перебираем список свойств известной structure в C#

Июль 8, 2022 г.

Мне нужен был выбор цвета из некоторой палитры, и я обнаружил подходящий список в пакете SkiaSharp, где определена структура SKColors, перечисляющая статические значения цветов. Вот такой список: [crayon-67d11034b5be6374215284/] Я хотел получить ...

Читать

 

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

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



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