Я рассмотрел две коллекции с аналогичной концепцией - ParHashMap
от Scala и ConcurrentHashMap с Java. Обе они имеют одинаковую временную сложность, и обе они являются потокобезопасными и незакрепленными, но они основаны только на разных концепциях под капотом и хеш-таблицей соответственно. И это рассуждение приводит к вопросу: зачем нам нужен ParHashMap из Scala, в то время как ConcurrentHashMap с Java?Почему мы нуждаемся в ParHashMap из Scala, в то время как ConcurrentHashMap из Java
ответ
ConcurrentHashMap
является потокобезопасным Map<>
осуществления. Если вы одновременно используете несколько потоков, они будут синхронизироваться.
ParHashMap
- это параллельная коллекция. Если вы выполняете операции здесь (например, map()
, filter()
, aggregate()
) Scala будет распараллелить его для вас (аналогично Spark, но только внутри одной JVM).
Подводя итог, ConcurrentHashMap
дает примитиву синхронизировать потоки для параллелизма, ParHashMap
выполняет как синхронизацию, так и выполнение.
Редактировать: Обратите внимание, что ParHashMap
не является само по себе нитевым. Идея состоит в том, чтобы вызвать его методы из одного потока и позволить параллелизму обрабатываться самой параллельной структурой данных.
@ Вы сказали: «Если вы выполняете операции здесь (например, map(), filter(), aggregate()), Scala будет распараллеливать его для вас.« Как он работает, подобно механизму распараллеливания Spark? – pacman
Да, похоже, но только внутри одной машины. Вы можете указать поток, который будет использоваться. – marios
На самом деле изобретатель Искры сказал, что он черпал вдохновение из параллельной коллекции Scala, изобретая абстракцию RDD. – marios
- 1. Использование Scala ParHashMap в проекте Java вместо ConcurrentHashMap
- 2. Почему мы нуждаемся в регуляризации обучения MaxEnt?
- 3. Четкие элементы из ConcurrentHashMap в то время как переборе
- 4. Почему мы нуждаемся в продолжении «семени»?
- 5. Где мы нуждаемся XSD.exe
- 6. Почему мы нуждаемся в собственности и переменной в iOS?
- 7. Почему мы нуждаемся в Bower вместе с Nuget?
- 8. Scala в то время как назначение петли
- 9. Почему мы не нуждаемся в i ++ в работе с файлами в java?
- 10. Как заблокировать бесплатное использование двух ConcurrentHashMap в java/scala?
- 11. Мы действительно нуждаемся в @file или @since тегах JavaDoc?
- 12. Как использовать ConcurrentHashMap computeIfAbsent() в Scala
- 13. Java: почему мы получаем Matcher из шаблона
- 14. Удаление из ConcurrentHashMap
- 15. Добавление и удаление значений из ConcurrentHashMap в то время как итерация над ним
- 16. Возвращаясь из цикла в то время как
- 17. Java Удалить конкретный элемент из ConcurrentHashMap
- 18. ConcurrentHashMap в Java?
- 19. В каких случаях мы нуждаемся в защищенном наследовании?
- 20. PHP партия из в то время как
- 21. Возвращение из «за» в Scala не то же самое, как возвращение из «за» в Java
- 22. Java делают время, в то время как
- 23. Запрос относительно ConcurrentHashMap в Java
- 24. Сортировка значений в Java ConcurrentHashMap
- 25. Почему мы можем создавать новые классы, полученные из запечатанных (scala) в java?
- 26. Почему ConcurrentHashMap :: putIfAbsent быстрее, чем ConcurrentHashMap :: computeIfAbsent?
- 27. Предварительно скомпилированные заголовки? Мы действительно нуждаемся в них
- 28. цикл через ConcurrentHashMap из ConcurrentHashMaps
- 29. Почему ConcurrentHashMap работа в перепроверили Блокировка
- 30. Java ConcurrentHashMap
ConcurrentHashMap не запирать бесплатно – talex
@talex Вы не правы - https://en.wikipedia.org/wiki/Java_ConcurrentMap#Lock-free_atomicity – pacman
@talex Я думаю, что он будет использоваться без блокировки бесплатно, но что изменилось в Java 8. –