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