Почему Scala хорош для параллелизма? - PullRequest
31 голосов
/ 18 декабря 2010

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

Ответы [ 5 ]

46 голосов
/ 18 декабря 2010

В настоящее время Scala уже поддерживает две основные стратегии параллелизма - параллелизм на основе потоков (производный от Java) и типобезопасный параллелизм на основе акторов (вдохновленный Erlang),В ближайшем будущем (Scala 2.9) к этому добавятся два больших дополнения:

Синтаксис субъекта (операторы параллелизма) находится под сильным влиянием Эрланга (с некоторыми важными дополнениями) - в отношении используемой вами библиотеки (стандартные акторы, Akka, Lift, scalaz), могут быть разные комбинации вопросительных и восклицательных знаков: ! (в большинстве случаев для отправки сообщения в одну сторону), !!, !? и т. д.

Кроме тогопервоклассные функции делают вашу жизнь проще, даже когда вы работаете со старыми средами параллелизма Java: ExecutorService, Fork-Join Framework и т. д.

Выше всегонеизменность, которая значительно упрощает параллелизм, делая код более предсказуемым и надежным.

16 голосов
/ 18 декабря 2010

Существует ряд языковых функций, которые делают Scala подходящим для параллелизма.Например:

  • Большинство структур данных являются неизменяемыми и не требуют ничего особенного для одновременного доступа.
  • Функциональный стиль является действительно хорошим способом выполнения операций с высокой степенью одновременности.
  • Scala включает в себя действительно удобную "актерскую" среду, которая помогает при одновременных асинхронных операциях.

Дополнительная информация:

http://www.ibm.com/developerworks/java/library/j-scala02049.html

http://blog.objectmentor.com/articles/2008/08/14/the-seductions-of-scala-part-iii-concurrent-programming

http://akka.io

10 голосов
/ 18 декабря 2010

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

Так что, в некотором смысле, репутация Scala обусловлена ​​тем, что я - «я тоже» успешных техник. Тем не менее, есть кое-что, что Scala действительно привносит в таблицу, - это способность поддерживать такие дополнения к языку через библиотеки, что позволяет адаптировать и применять новые методы по мере их разработки.

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

Они, эти библиотеки, даже доступны для Java, но там они неуклюжи для использования.

Так что секрет не в том, что он может сделать, а в том, чтобы он выглядел легко.

7 голосов
/ 18 декабря 2010

Главное ключевое слово здесь - неизменность. См. эту вики-страницу . Поскольку любая переменная может быть определена как изменяемая или неизменяемая, это большой выигрыш для параллелизма, поскольку, если объект не может быть изменен, он является потокобезопасным, и поэтому написание параллельных программ проще.

3 голосов
/ 18 декабря 2010

Просто чтобы чуть-чуть дождаться у всех на параде, см. Этот вопрос .

Я дважды закодировал довольно много многопоточных вещей в Scala (в основном, используя Futures, немного с актерамитоже) и C ++ (с использованием TBB) с тех пор (в основном проблемы Project Euler).Общая картина, по-видимому, заключается в том, что Scala требуется ~ 1/3 числа строк кода решения C ++ (и быстрее написать), но решение C ++ будет работать в ~ 10 раз быстрее (если вы не приложите некоторые усилия, чтобы избежать каких-либо«отток объекта», как показано в быстрой версии в ответе, указанном выше, но в этот момент вы теряете большую часть элегантности Scala).Я все еще на 2.7.7 возражаю против вас;Я еще не пробовал Scala 2.8.

Использование Scala было моей первой настоящей встречей с языком, который сильно подчеркивал неизменность, и я впечатлен его способностью значительно упростить ментальную модель, которую вы должны поддерживать для состояния объекта.машины »во время программирования (а это, в свою очередь, облегчает кодирование для параллелизма).Это определенно повлияло на то, как я подхожу к кодированию на C ++.

...