Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Конкурентное программирование / hyper и race 🆕 / Exercises / Сумма с race

Решение: Сумма с race

Вот один из возможных вариантов решения задачи.

Код

say (1..50).race.map(* ** 2).grep(* %% 2).sum;

🦋 Исходный код можно найти в файле parallel-sum.raku.

Вывод

22100

Комментарии

  1. .race выполняет всю цепочку — возведение каждого числа в квадрат и отбор чётных квадратов — параллельно и, в отличие от .hyper, не обещает вернуть элементы по порядку.

  2. Здесь это не страшно, потому что последний шаг — суммирование, которое от порядка не зависит: чётные квадраты (, , …, 50²) в сумме дают 22100, в каком бы порядке они ни пришли. Когда вы лишь объединяете результаты (сумма, количество), .race — естественный выбор, и издержек у него может быть чуть меньше, чем у .hyper.

Навигация по курсу

Сумма с race   |   hyper с фильтром