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的编程就是为并发而设计的,这是一个基本的假设,因此它理论上可能以传递消息的并发方式实现任何顺序的计算。





数据驱动的两阶段分布鲁棒(1-范数和∞-范数约束)的电热综合能源系统研究(Matlab代码实现)内容概要:本文围绕“数据驱动的两阶段分布鲁棒(1-范数和∞-范数约束)的电热综合能源系统研究”展开,提出了一种结合数据驱动与分布鲁棒优化方法的建模框架,用于解决电热综合能源系统在不确定性环境下的优化调度问题。研究采用两阶段优化结构,第一阶段进行决策,第二阶段根据实际场景进行调整,通过引入1-范数和∞-范数约束来构建不确定集,有效刻画风电、负荷等不确定性变量的波动特性,提升模型的鲁棒性和实用性。文中提供了完整的Matlab代码实现,便于读者复现和验证算法性能,并结合具体案例分析了不同约束条件下系统运行的经济性与可靠性。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及工程技术人员,尤其适合从事综合能源系统、鲁棒优化、不确定性建模等相关领域研究的专业人士。; 使用场景及目标:①掌握数据驱动的分布鲁棒优化方法在综合能源系统中的应用;②理解1-范数和∞-范数在构建不确定集中的作用与差异;③学习两阶段鲁棒优化模型的建模思路与Matlab实现技巧,用于科研复现、论文写作或工程项目建模。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现细节,重点关注不确定集构建、两阶段模型结构设计及求解器调用方式,同时可尝试更换数据或调整约束参数以加深对模型鲁棒性的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值