0

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

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

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

4

2 回答 2

1

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

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

实现如何在多个线程之上运行您的参与者应该是无关紧要的。但是您当然可以随意查看Akka 源代码。

于 2013-11-05T14:40:17.647 回答
1

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

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

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

于 2013-11-05T17:41:23.580 回答