Порахуйте частоту літер у текстах за допомогою паралельних обчислень.
Паралелізм полягає в тому, щоб виконувати паралельно те, що також можна виконати послідовно. Поширений приклад - підрахунок частоти літер. Застосуйте паралелізм, щоб обчислити загальну частоту кожної літери в масиві текстів.
Згідно з цією термінологією, нам варто написати паралельну й детерміновану програму, а про конкурентність (і то неодмінно!) хай подбає Scala. Інакше код швидко стане заплутаним і схильним до помилок через усілякі підступні баги конкурентності. Зокрема, програма може стати недетермінованою, а це на практиці означає, що її буде дуже (насправді ДУЖЕ) важко налагоджувати, тестувати й аналізувати.
Утім, можливо, варто спершу написати послідовне рішення (і перевірити його за допомогою набору тестів). І лише потім спробувати розпаралелити його, тримаючи послідовну й паралельну частини коду якнайбільш відокремленими.
Першою ітерацією могло б стати використання паралельних колекцій Scala. Можливо, це видасться майже занадто простим (особливо якщо ми вже дослухалися до нашої поради й маємо послідовне рішення).
Для другої ітерації радимо спробувати рішення з scala.concurrent.Future. По допомогу можна звернутися до цього посібника та його продовження. Переконаймося, що:
scala.concurrent.Future використовують у багатьох бібліотеках, і саме це радять для паралельного й асинхронного програмування в Scala. Тож це важливо для опанування мови, і це має стати частиною нашого арсеналу в Scala.
Зареєструйтеся на Exercism, щоб вивчати й опановувати Scala, а також 95 вправ та справжнє наставництво від людей, і все це безкоштовно.
Ми дослідимо різницю між конкурентністю і паралелізмом, розглянувши різні підходи, які застосовують такі мови, як JavaScript, Go, Elixir і Rust.