0

来自akka文档:

与对象不同,参与者不仅封装了它们的状态,还封装了它们的执行。与参与者的通信不是通过方法调用,而是通过传递消息。虽然这种差异可能看起来很小,但实际上它使我们能够在并发和远程通信方面摆脱 OOP 的限制。

我了解并发性,但对远程通信不是很清楚。

4

2 回答 2

1

远程通信本质上总是异步消息传递。

在 OOP 中,对象间的通信通常通过同步方法调用(即调用阻塞直到它有结果)来完成。因此,为了与远程对象进行通信,必须要么使用包装底层异步消息传递的 RPC 机制来呈现同步接口,要么使用类似 future 的东西来使接口成为同步和异步的混合体。这两种方法都增加了很多复杂性:RPC 机制往往会增加很多隐藏的复杂性,而未来往往会增加很多明显的复杂性。

对于参与者来说,通信是异步消息传递。向与发送者在同一 JVM 中运行的 Akka Actor 和在不同 JVM(同一机器或不同机器)中运行的 Akka Actor 发送消息之间的唯一概念区别在于,在前一种情况下,可以通过不序列化消息来进行优化. 除了让两个不同的 JVM 进行通信的内在开销之外,让参与者进行远程通信并没有增加复杂性。如果两个参与者可以在本地成功地一起工作以组成一个工作系统,那么几乎可以肯定他们可以轻松地(例如使用 Akka 远程处理)一起工作,即使他们需要通过网络进行通信。

于 2020-01-31T16:49:50.453 回答
0

在 Akka Toolkit 中,Actor 可以封装状态和行为:

An Actor = State + behavior

但是,此状态只能通过自身访问或修改。没有其他人可以访问它。

就像在共享状态并发模型中一样,线程是一个基本的执行单元;在 Actor 中,Aactor 是执行的基本单元。

Actor 也是一个对象;但是,它不像普通的 OOP 对象。它不是一个简单或普通的对象。它内部有许多组件,并且可以做更多的事情来轻松地执行其工作或计算。

ActorRef
Dispatcher
Mailbox
Actor
于 2020-01-30T18:38:25.163 回答