【问题标题】:Actors at a very deep level, what makes them unique?演员在很深的层次上,是什么让他们与众不同?
【发布时间】:2013-11-04 20:15:59
【问题描述】:

我不擅长多线程编程。我和akka 的合作已经够多了,但是我仍然不明白是什么让actors 和akka 如此整洁、方便、安全等等。我知道他们会收到消息,演员一次只能收到消息。但它又是什么,是什么让它们成为线程安全的呢?

首先,actor 只是一个建立在系统线程上的库,涉及使用共享可变状态,它们需要以某种方式处理它。

所以问题是,演员如何在非常深的层次上工作?我也很感激任何关于它的链接。

【问题讨论】:

  • Akka 资源已开放,您是否尝试查看它们?

标签: multithreading akka actor


【解决方案1】:

Björn 的回答很重要:actor 模型封装了状态以及在actor 中对该状态进行操作的任何逻辑。从外部改变状态的唯一方法是向actor发送消息。

因为只有actor可以修改状态,并且因为它是串行处理消息的,所以不可能同时修改。没有竞争条件。

Ryan Tanner(披露:Ryan 在我的公司工作)有一篇很棒的博文,讲述了演员的特别之处:http://blog.goconspire.com/post/64274254800/akka-at-conspire-part-2-why-we-like-actors

【讨论】:

    【解决方案2】:

    您似乎将Actor ModelAkka 中的一个具体实现混为一谈。

    单个actor中的代码在任何给定时间仅在一个线程上运行,在任何给定时间处理一条消息。如果您的参与者之间不共享可变对象并且仅通过不可变消息进行通信,那么代码不会出现您无意中同时从多个线程更改相同对象/变量的竞争。

    实现如何在多个线程上运行您的演员应该是无关紧要的。不过你当然可以随意看Akka source code.

    【讨论】:

      猜你喜欢
      • 2017-09-28
      • 2011-09-09
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 2014-06-02
      • 1970-01-01
      • 2012-05-15
      • 2018-04-25
      相关资源
      最近更新 更多