Являются ли параллельные коллекции Scala лучше в некотором смысле, чем параллельные коллекции, уже доступные в Java? - PullRequest
12 голосов
/ 01 июня 2011

Недавно я узнал о различных библиотеках для параллелизма в Java, таких как ConcurrentHashMap и о прекрасной неблокирующей библиотеке из Cliff Click

ДонЯ не знаю много о Scala, но я слышал много хорошего о недавней библиотеке параллельных коллекций.

Я хотел бы знать, какие основные преимущества дает эта библиотека по сравнению с библиотеками на основе Java?

Ответы [ 3 ]

26 голосов
/ 01 июня 2011

Две коллекции предназначены для разных целей.

Параллельные коллекции Java позволяют вам использовать их из параллельного контекста: многие потоки могут получать к ним доступ одновременно, и коллекция обязательно будет делать правильные вещи (поэтому вызывающим не нужно беспокоиться о блокировках и тому подобном).

Параллельные коллекции Scala, напротив, предназначены для выполнения операций высокого порядка над собой без необходимости беспокоиться о создании потоков. Таким образом, вы можете написать что-то вроде:

myData.par.filter(_.expensiveTest()).map(_.expensiveComputation())

и фильтр и карта будут выполняться параллельно (но фильтр завершится до запуска карты).

7 голосов
/ 01 июня 2011

Чтобы немного расширить ответ Rex: причина, по которой параллельные изменяемые коллекции в стиле Java не очень интересны в Scala, заключается в их предвзятости к неизменяемым данным. модель актера (которая опирается на неизменные данные), а не потоки.

5 голосов
/ 02 июня 2011

В дополнение к приведенному выше ответу Рекса Керра о параллельных и параллельных коллекциях, предназначенных для двух разных целей, я хотел бы добавить, что на самом деле Java имеет реализацию параллельного массива Дуга Ли в дополнительном пакете JSR 166.массовые операции, выполняемые с элементами массива, но не подходящие для одновременного доступа без явной синхронизации.Одно из существенных отличий заключается в том, что параллельные коллекции Scala имеют параллельные реализации и для других коллекций, а не только для массивов.Это:

  • ParVector
  • ParRange
  • mutable.ParHashMap
  • mutable.ParHashSet
  • immutable.ParHashMap
  • immutable.ParHashSet

Все последовательные варианты этих коллекций могут быть непосредственно преобразованы в их параллельные аналоги (метод par).Другие последовательные коллекции могут быть преобразованы в некоторые из вышеупомянутых коллекций в линейном времени относительно размера коллекции.

Некоторые дополнительные структуры данных находятся на подходе для будущих выпусков, включая некоторые параллельные коллекции, которые также позволят одновременный доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...