处于非常深层次的演员,是什么让他们与众不同?

时间:2013-11-04 20:15:59

标签: multithreading akka actor

我在多线程编程方面不够强大。而且我一直在和akka打交道,但是我仍然不明白是什么让演员和akka如此整洁,方便,安全等等。我知道他们收到消息,演员一次只能收到消息。但是,是什么让它们成为线程安全的呢?

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

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

2 个答案:

答案 0 :(得分:1)

您似乎将Actor ModelAkka中的一个具体实现混合在一起。

单个actor中的代码只能在任何给定时间在一个线程上运行,在任何给定时间处理一条消息。如果你的actor之间不共享可变对象并且只通过不可变消息进行通信,那么代码就没有你不经意间同时从多个线程改变同一个对象/变量的种类。

实现如何在多个线程之上运行您的actor应该是无关紧要的。但你当然可以自由地查看Akka source code.

答案 1 :(得分:1)

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

因为只有actor可以修改状态,并且因为它以串行方式处理消息,所以不可能进行并发修改。没有竞争条件。

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