Actor模型在并发编程中是比较常见的一种模型,很多开发语言都提供了原生的Actor模型实现,例如Erlang、Scala等。Actor可以看作是一个个独立的实体,它们之间是毫无关联的,但是它们可以通过消息来通信。一个Actor收到其他Actor的信息后,可以根据需要做出各种响应,消息的类型可以是任意的,消息的内容也可以是任意的,它只提供接口服务,而不必了解具体内容是如何实现的。一个Actor如何处理多个Actor的请求呢?它先建立一个消息队列,每次收到消息后,就放入队列,而它每次也从队列中取出消息体来处理。为了使这个操作持续下去,通常都使得这个过程是循环的,让Actor可以时刻处理发送来的消息。
Actor模型提供了一种不共享任何数据、依赖消息传递的模型。Actor是一个类似于线程的实体,它有一个用来接收消息的邮箱,类似于Java中的Runnable任务接口。在并发编程中,Actor模型相对于使用共享数据和锁模型的实现来说,推断和使用都更加容易。
在共享数据和锁模型中编写多线程程序,程序中的每一点,都必须推断要修改或访问的数据是否可能会被其他线程修改或访问,以及在这一点上握有哪些锁,程序每一次运行都必须推断出它将要握有哪些锁,并且确定这样不会死锁。虽然从Java 5开始引入了java.util.concurrent并发工具包,但是该工具包依然是基于共享数据和锁模型的,没有从根本上解决使用这种模型潜在的困难。因此在设计并发软件时,Actor模型是首选工具,因为它可以避开死锁和争用的状况,而这两种情形在使用共享数据和锁模型的时候是很容易遇到的。
Actor模型在并发编程上面的优势,使其在并发编程中获得了广泛的运用。Actor之间传递消息模型如图9-1所示。(www.daowen.com)
图9-1 Actor通信模型
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。