Подтвердить что ты не робот

Попытка найти Scala учебники, которые фокусируют многопоточность

Scala, похоже, имеет массу возможностей и улучшений по сравнению с Java. Мне трудно изолировать материал, который я хочу сначала узнать о Scala. Что я должен искать в Google, если я просто хочу, например, взять за циклы и заставить их работать с несколькими потоками или процессами? Я исхожу из графического ядра GPU, где было действительно просто получить представление высокого уровня о том, как заставить вещи работать быстрее.

4b9b3361

Ответ 1

  • Scala параллельные коллекции особенно просты. Параллелирование дорогостоящей операции f(i) по целым числам i <- 1 to 10 так же просто, как

    (1 to 10).par.map(i => f(i))
    

    Scala попытается выделить несколько рабочих потоков, которые сопоставимы с количеством ядер/процессоров, доступных в вашей системе. Здесь видео с более подробной информацией: http://days2010.scala-lang.org/node/138/140

  • Akka framework - это зрелый, в основном актерский подход к concurrency, который позволяет распараллеливать потоки или удаленные процессы. Актеры - это в основном потоки, которые могут передавать сообщения, а не разделять их. Недавно созданная компания Typesafe разрабатывает язык Scala и Akka.

  • Вы также можете попробовать проект выпуска библиотеки программной памяти транзакций (STM) для Scala. Библиотека нацелена на включение в стандартное распределение Scala. По сравнению с потоками, управляемыми вручную, STM - это более простая модель concurrency, которая уменьшает вероятность ошибок, таких как блокировки. Он работает, группируя последовательности операций связи в один синхронизированный блок, который может сбой и откат, если несколько потоков выполняют что-то с общим состоянием, которое оказывается взаимно несовместимым. Предположительно, есть некоторые эксплуатационные расходы для оплаты за удобство; Я не уверен, насколько STM масштабируется для большого количества потоков.

  • Исправленная инфраструктура описывает кластерные вычисления и, по-видимому, является обобщением MapReduce.

  • Для программирования GPU с Scala, ScalaCL. Вы также можете использовать привязки Java.

  • Также очень интересная работа по виртуализации языков делается в качестве совместной работы между лабораториями в Стэнфорде и EPFL. Эта страница содержит ссылки на документы, и есть курс в Стэнфорде со многими другими ссылками. Существует несколько интересных приложений для разработки DSL для высокопроизводительных вычислений в гетерогенных вычислительных средах, включая графические процессоры.

Update. Даниэль Собрал также предложил Инструменты и библиотеки wiki.