【问题标题】:Clojure equivalent of "Actors"Clojure 相当于“演员”
【发布时间】:2020-04-15 06:49:54
【问题描述】:

我最近一直在研究 Elixir 和 Akka,这让我想到:Clojure 中的等价物是什么?

  • 我发现了一些关于代理与演员的“消息吞吐量比较”帖子,但它们来自 8 年前
  • 一个答案曾经agents ...但这不是完全一回事(代理似乎没有他们自己的 em> 逻辑,它们是由外部代码“作用”的)
  • 另一个较新的答案是Pulsar fibers(更接近,但是......仍然保持不变吗?)

(我知道我可能“在这里问错了问题”,希望这不会太开放)

【问题讨论】:

    标签: clojure akka actor agent pulsar


    【解决方案1】:

    Rich Hickey 在他 2008 年的演讲“Clojure Concurrency”中明确区分了代理和演员,并提到了它们彼此不同的几种方式。如果您想快速找到其中一些 cmets,请在本次演讲的成绩单中搜索“代理人”和“演员”: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-not/

    我的理解是,如果你想要 Erlang 风格的演员,你基本上需要线程/进程之间不可靠的消息队列。在不同的进程之间,有多种方法可以实现不可靠的消息传递,没有一种内置于 Clojure 中,但都可以通过 Java 互操作获得。

    【讨论】:

    • 模拟不可靠的消息队列当然很容易:从可靠的消息队列入手,任意丢弃消息!
    • 我想我应该澄清一下,当我说“不可靠的消息队列”时,我的意思是“不保证可靠传递的消息队列”,我并不是指“保证不可靠的消息队列”:- )
    • 是的,我知道它们是不同的,我想知道(在此后的十年中......)是否有人觉得需要创建与 Clojure 中的演员等效的东西,以及通常的嫌疑人( core.async、agents、fibers via pulsar)与今天的 akka 进行比较。
    • 对不起,如果这不是您想要的,但是您对“一个答案曾经是代理”的评论,并且根据我所知道的答案,Clojure 代理从来都不是如何解决问题的答案使用actor模型的程序,或者至少不是一个正确的答案。
    猜你喜欢
    • 1970-01-01
    • 2011-03-16
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多