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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Перерисовка без мерцания в C# WPF

Июль 10, 2020 г.

Классика задач связанной с анимацией. Требуется так перерисовать картинку, чтобы пользователь не видел мерцания, связанного с очисткой объекта canvas. Почему возникает эффект мерцания при перерисовке? Обычно это связано с техникой создания следующего ...

Читать

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

Июль 8, 2022 г.

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

Читать

 

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

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



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