Actors in Scala(Scala中的Actor)(预打印版) 第二章 Messages All the Way Up (C)

Actors in Scala(Scala中的Actor)(预打印版) 第二章 Messages All the Way Up (C)

张贵宾

guibin.beijing@gmail.com


2011.10.10


注:翻译这些英文书籍资料纯属个人爱好,如有不恰当之处敬请指正。

2.3 Actor creation(创建actor)

Actor可以给它所知道地址的actor发送消息,持续的消息传递是actor获取其他actor地址的一种方式。获取其他actor的另一种方式是actor在处理收到的消息时创建新的actor。这些新建的actor-子actor-具有与父actor相独立的生命周期。创建了新的actor之后,创建者可以给新的actor发送消息,并且把自己的地址作为消息的一部分发给它。


Actor可以创建其他actor的能力使得actor能够很轻松的实现并行语句块(fork-join parallelism),比如:收到消息时,actor可以自行决定是否将潜在的计算密类型的大任务分解开,并创建子actor去处理这个大块计算中的一部分。actor的创建者可以把工作分摊到这些小的子actor中,并且等待它的孩子们完成这些工作,然后再将最终结果返回。一旦所有的都收集齐了,父actor可以汇总这些结果,也有可能把结果发送给其他的actor,或者持续传递下去。我们将在随后的章节中提供一些并行语句块方面的例子。


2.4 Actor events(actor事件)

虽然截止目前为止,我们都专注于actor给其他actor发送消息的能力,但是所有的actor在收到消息时都会发生一些行为。在actor系统中,收消息和创建其他的actor就是两种事件的例子。



事件和他们之间的关系阐述了物理现象是如何引发actor编程模型的。比如:当actor B收到了来自于actor A的消息时,actor B以向actor C发送消息作为响应结果,这个过程定义了事件的发生顺序。如图2.10。




在这个例子中,消息发送给B导致了或者说激活了事件C。


在Carl Hewitt和Henry Baker撰写的开创性论文《Laws for Communicating Parallel Processes(并行处理的定律)》阐述了这个观点:

激活在actor中具有因果关系。。。与物理学的粗糙模拟可以使得这个“激活”概念更清晰。光子(即消息)被一个原子(目标)接受,此时原子处于激发状态。过了一会儿,原子又发出一个或者多个光子,并且使得原子回到它原来的稳定状态。这些被激发的光子可能被其他的原子收到,那么第二次事件可以说是被第一次事件激发的。


除了事件到达和创建actor这两种事件,基于actor的系统还包含一些初始化事件,打个比喻说,只有这些初始化事件才能使得球开始转动起来。因此因果关系就扩展到三种事件中:初始事件必须优先于所有其他的事件,并且可能包含一系列初始化actor。这些actor能够以任何顺序,处理彼此之间的激活事件。最终,很明显的,对于这个actor而言,actor的创建事件必须优先于激活事件


我们可以看到到达事件和激活事件非常好的以时间顺序串行起来,某个事件总会发生在其他事件之前。确实,基于actor的计算可以描述成到达事件和激活事件的线性结合:计算自某个事件开始,之后紧接着其他有限的一系列事件,最终计算终结于最后一个事件。事件的顺序是非常严格的,也就是一个事件仅仅能被在此之前的其他事件所影响。


当我们说一个事件发生在另一个事件之前或之后,直观上是指时间的概念。在顺序计算(sequential computation)中,如果全部的程序状态都全局共享的话,那么组成计算的事件序列是指全局时间:即所有参与计算的对象所共享的时间。基于actor的系统,相比之下,它将全局的程序状态劈成若干被每个actor所持有的本地状态。这些actor仅仅通过传递消息交互,没有涉及共享时间这样的概念。相反的,在基于actor的系统中事件的到达顺序指的是对于actor的本地时间,没有要求全局时间的概念。


将在本地发生的actor事件的局部顺序抽象成actor,这是一个巨大的抽象。actor编程模型设计者已经证明了,你可以使用一系列actor事件实现任何控制结构。因为基于actor的编程就是为并发而设计的,这是一个基本的假设,因此它理论上可能以传递消息的并发方式实现任何顺序的计算。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值