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.

Другие вопросы по тегам