我不擅长多线程编程。我和akka 的合作已经够多了,但是我仍然不明白是什么让actors 和akka 如此整洁、方便、安全等等。我知道他们会收到消息,演员一次只能收到消息。但它又是什么,是什么让它们成为线程安全的呢?
首先,actor 只是一个建立在系统线程上的库,涉及使用共享可变状态,它们需要以某种方式处理它。
所以问题是,演员如何在非常深的层次上工作?我也很感激任何关于它的链接。
我不擅长多线程编程。我和akka 的合作已经够多了,但是我仍然不明白是什么让actors 和akka 如此整洁、方便、安全等等。我知道他们会收到消息,演员一次只能收到消息。但它又是什么,是什么让它们成为线程安全的呢?
首先,actor 只是一个建立在系统线程上的库,涉及使用共享可变状态,它们需要以某种方式处理它。
所以问题是,演员如何在非常深的层次上工作?我也很感激任何关于它的链接。
Björn 的回答很重要:actor 模型将状态和任何在该状态上操作的逻辑封装在一个actor 中。从外部改变状态的唯一方法是向actor发送消息。
因为只有actor可以修改状态,并且因为它是串行处理消息的,所以不可能同时修改。没有比赛条件。
Ryan Tanner(披露:Ryan 在我的公司工作)有一篇很棒的博客文章,讲述了演员的特别之处:http: //blog.goconspire.com/post/64274254800/akka-at-conspire-part-2-why-we-喜欢的演员。