akka actor 如何帮助轻松进行远程通信

How akka actor helps in easy remote communication

来自 akka 文档:

Unlike objects, actors encapsulate not only their state but their execution. Communication with actors is not via method calls but by passing messages. While this difference may seem minor, it is actually what allows us to break clean from the limitations of OOP when it comes to concurrency and remote communication.

我了解一点关于并发的知识,但对远程通信不是很清楚。

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

An Actor = State + behavior

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

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

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

ActorRef
Dispatcher
Mailbox
Actor

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

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

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