我在多线程编程方面不够强大。而且我一直在和akka打交道,但是我仍然不明白是什么让演员和akka如此整洁,方便,安全等等。我知道他们收到消息,演员一次只能收到消息。但是,是什么让它们成为线程安全的呢?
首先,actor只是一个基于系统线程构建的库,涉及使用共享的可变状态,并且需要以某种方式处理它。
所以问题是,演员如何在非常深层次上工作?我也很感激有关它的任何链接。
答案 0 :(得分:1)
您似乎将Actor Model与Akka中的一个具体实现混合在一起。
单个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。