我最近一直在研究 Elixir 和 Akka,这让我思考:Clojure 中的等价物是什么?
- 我发现了一些关于代理与演员的“消息吞吐量比较”帖子,但它们来自 8 年前
- 一个答案曾经是
agents
......但这并不完全相同(代理似乎没有自己的逻辑,它们是由外部代码“作用”的) - 另一个最近的答案是
Pulsar
纤维(更接近,但......仍然保持不变吗?)
(我知道我可能“在这里问错了问题”,希望这不是太开放)
Rich Hickey 在他 2008 年的演讲“Clojure Concurrency”中明确区分了代理和演员,并提到了它们彼此不同的几种方式。如果您想快速找到其中一些评论,请在本次演讲的记录中搜索“代理”和“演员”:https ://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/ClojureConcurrency.md
clojure.org 上有关代理和演员之间差异的更多信息:https ://clojure.org/about/state#actors
另一个比我更了解原始 Hewitt 演员模型的人的谈话,显然,这可能对阅读有用:http ://www.dalnefre.com/wp/2010/06/actors-in-clojure-why-不是/
我的理解是,如果你想要 Erlang 风格的演员,你基本上需要线程/进程之间不可靠的消息队列。在不同的进程之间,有许多方法可以实现不可靠的消息传递,没有一种方法内置在 Clojure 中,但都可以通过 Java 互操作获得。