Clojure фьючерсы в контексте моделей Scala concurrency

Привет, ребята: После того, как я был представлен scala Актерам и Clojure Futures, я чувствую, что оба языка отлично поддерживают многоядерную обработку данных.

Тем не менее, я до сих пор не смог определить реальные инженерные различия между функциями concurrency и плюсами/минусами двух моделей. Являются ли эти языки бесплатными или противостоят с точки зрения их обработки параллельных абстракций процесса?

Во-вторых, что касается больших проблем с данными, неясно, поддерживает ли сообщество scala поддержку Hadoop явно (тогда как сообщество Clojure явно делает). Как разработчики scala взаимодействуют с экосистемой hadoop?

Было бы полезно оценить любые эти два вопроса.

Ответ 1

Некоторые решения хорошо решаются агентами/акторами, а некоторые - нет. Это различие на самом деле не в языках больше, чем , как конкретные проблемы соответствуют общим классам решений. Это (очень короткое) сравнение Actors/agents vs. Ссылки, чтобы попытаться прояснить, что инструмент должен соответствовать проблеме concurrency.

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

Clojure ref - отличное решение проблемы многих потоков, нуждающихся в одновременном изменении одной и той же вещи. Они превосходят многопользовательские системы с общей памятью, такие как сегодня ПК и серверы. В дополнение к примеру банковского счета Rich Hickey (автор clojure) использует пример игры в бейсбол, чтобы объяснить, почему это важно. Если вы хотите использовать актеров для представления бейсбольной игры, то перед тем, как вы переведете мяч, всем фанатам придется послать ему сообщение с просьбой, где оно было... и если они хотят посмотреть, как игрок ловит мяч, более сложный.

Clojure имеет cascalog, который заставляет писать задания hadoop во многом похожи на запись clojure.

Ответ 2

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

Что касается Hadoop, то Twitter только что выпустил библиотеку специально для Hadoop под названием Scalding, но пока библиотека написана для JVM, он должен работать с любым языком.