Clojure эквивалент "Actors"
Недавно я изучал Elixir и Akka, и это заставило меня задуматься: а что эквивалентно в Clojure?
- Я нашел пару сообщений о "сравнении пропускной способности сообщений" об агентах и актерах, но они были сделаны 8 лет назад.
- Раньше один ответ был
agents
... но это не совсем то же самое (агенты, похоже, не имеют собственной логики, на них "действует" внешний код) - Другой несколько недавний ответ был
Pulsar
волокна (ближе, но... это все еще поддерживается?)
(Я понимаю, что, возможно, я "задаю неправильный вопрос здесь", надеюсь, это не слишком открытый конец)
1 ответ
Рич Хики в своем выступлении "Clojure Concurrency" в 2008 году явно различает агентов от акторов, упомянув несколько способов их отличия друг от друга. Если вы хотите быстро найти некоторые из этих комментариев, поищите "агент" и "актер" в стенограмме этого выступления: https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/ClojureConcurrency.md
Подробнее о различиях между агентами и актерами на clojure.org: https://clojure.org/about/state
Еще один разговор с кем-то, кто знает об исходной модели актеров Хьюитта больше, чем я, по-видимому, может быть полезно прочитать: http://www.dalnefre.com/wp/2010/06/actors-in-clojure-why-not/
Насколько я понимаю, если вам нужны актеры в стиле Erlang, вам в основном нужны ненадежные очереди сообщений между потоками / процессами. Между различными процессами существует множество способов получить ненадежную передачу сообщений, ни один из которых не встроен в Clojure, но все они доступны через взаимодействие с Java.