Ответ 1
Некоторые решения хорошо решаются агентами/акторами, а некоторые - нет. Это различие на самом деле не в языках больше, чем , как конкретные проблемы соответствуют общим классам решений. Это (очень короткое) сравнение Actors/agents vs. Ссылки, чтобы попытаться прояснить, что инструмент должен соответствовать проблеме concurrency.
Актеры преуспевают в распределенной ситуации, когда данные не должны быть одновременно изменены. Если ваша проблема может быть выражена исключительно путем передачи сообщений, то актеры будут делать трюк. Актеры плохо работают там, где им необходимо одновременно модифицировать несколько связанных структур данных. Канонический пример этого - это перемещение денег между банковскими счетами.
Clojure ref
- отличное решение проблемы многих потоков, нуждающихся в одновременном изменении одной и той же вещи. Они превосходят многопользовательские системы с общей памятью, такие как сегодня ПК и серверы. В дополнение к примеру банковского счета Rich Hickey (автор clojure) использует пример игры в бейсбол, чтобы объяснить, почему это важно. Если вы хотите использовать актеров для представления бейсбольной игры, то перед тем, как вы переведете мяч, всем фанатам придется послать ему сообщение с просьбой, где оно было... и если они хотят посмотреть, как игрок ловит мяч, более сложный.
Clojure имеет cascalog, который заставляет писать задания hadoop во многом похожи на запись clojure.