В прошлом году я много работал над параллелизмом в Java, а также работал над многими параллельными пакетами. Так что с точки зрения развития в параллельном мире я вполне уверен. Кроме того, мне очень интересно узнать и понять больше о параллельном программировании.
Но я не могу ответить себе, что дальше? Что еще я должен изучать или работать, чтобы унаследовать больше навыков, связанных с многоядерной обработкой. Если есть какая-нибудь хорошая книга (прочитанная и понравившаяся «Параллелизм на практике» и «Параллельное программирование в Java») или ресурс, связанный с многоядерной обработкой, чтобы я мог перейти на следующий уровень?
concurrency
multi-core
Jatin
источник
источник
Ответы:
Отказ от ответственности - я не эксперт по параллелизму, но мой соавтор, я его попугаю :-)
Так как вы прочитали книги Дуга Ли и Брайана Гетца, вы наверняка рассмотрели лучший материал на сегодняшний день.
В будущем появятся новые усовершенствования параллелизма в Java 7. Наиболее заметно - инфраструктура Fork / Join и новые асинхронные API-интерфейсы NIO.
Java 8 представит дальнейшие улучшения параллелизма с лямбда / параллельными коллекциями.
Еще одна вещь, на которую стоит обратить серьезное внимание, это альтернативные способы борьбы с параллелизмом. Чтобы быть грубым, подход Java 'блокировать изменяемые объекты' всегда будет подвержен ошибкам, независимо от того, насколько улучшены API. Поэтому я рекомендую рассматривать модель актора Scala и STM Clojure как альтернативные способы решения проблем параллелизма при одновременном поддержании взаимодействия с Java.
[предупреждение -> самореклама] Поэтому я, естественно, порекомендую нашу будущую книгу The Well-Gounded Java Developer , которая охватывает все вещи, которые я упомянул выше: -). [/ warning]
Чтобы не забыть, в Groovy также есть очень рекомендуемая библиотека Gpars, хотя я не использовал ее лично.
источник
Язык программирования D предоставляет две парадигмы для параллельного программирования, оба из которых имеют свое применение и довольно интересны.
std.concurrency обеспечивает передачу сообщений без разделения памяти по умолчанию. Все глобальные и статические переменные в D являются поточно-местный по умолчанию и
spawn
иsend
не позволяют посылать сообщения, содержащие изменяемый указатель косвенность. Ограниченное совместное использование может быть получено черезshared
ключевое слово, что влечет за собой дополнительную проверку системой типов. Вне безопасного диалекта языка вы можете форсировать классические глобальные / общие переменные в стиле C / Java с помощью__gshared
ключевого слова, но тогда все ставки не принимаются в отношении безопасности гонки. Эта модель подробно описана в бесплатной главе книги Андрея Александресу «Язык программирования D».std.parallelism менее безопасен, но в некоторых отношениях более гибок, чем std.concurrency, и ориентирован именно на многоядерные данные и параллелизм задач для повышения пропускной способности обработки данных, а не параллелизма в общем случае. Он имеет параллельный цикл foreach, асинхронные вызовы функций, параллельные сокращения и т. Д. Он предоставляет механизмы, облегчающие написание кода, безопасного для гонки, но для этого все же требуется определенная дисциплина.
Более подробное обсуждение двух основных парадигм многопоточности в D можно найти в моей недавней статье на эту тему.
источник
Я настоятельно рекомендую вам пойти и взглянуть на Clojure
Подход к параллелизму очень нов, и, на мой взгляд, значительный прогресс в том, что вы видите в Java и большинстве других языков. Некоторые ключевые моменты:
Я бы посоветовал посмотреть это видео в качестве вступления
источник
Взгляните на язык Scala, который расширяет Java и работает на JVM. Он заимствует понятие «субъекты» от Erlang и дает хорошие возможности для обработки сбоев параллелизма.
источник
Если вы хотите поднять его на совершенно новый уровень, вы можете заняться программированием с помощью CUDA .
Это позволяет вам распределять ваши алгоритмы по сотням процессорных ядер на вашей видеокарте, а не по нескольким основным ядрам процессора. Существуют даже языковые привязки, которые, по-видимому, позволяют относительно легко ускорить языки высокого уровня, такие как python, с использованием методов GPGPU .
источник
Параллельное программирование на JVM: Мастеринг синхронизации, STM и Actors обсуждает параллельное программирование в Scala, Clojure, JRuby и Groovy.
Вы получите довольно четкое представление о различных подходах к параллелизму.
Где твоя улыбка?
источник