`
ai_longyu
  • 浏览: 479329 次
社区版块
存档分类
最新评论

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





分享到:
评论

相关推荐

    actors in scala

    This bookis a tutorial for programming with actors in the Scalaprogram-minglanguage. Actors providea high-levelprogramming model for con-current and distributed systems based onlightweight processes ...

    scala-actors-2.10 jar包

    scala-actors-2.10 jar包,可以解决 scala-actors-2.10以上版本带来的不兼容问题

    Actors in Scala 无水印转化版pdf

    Actors in Scala 英文无水印转化版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国...

    Actors in Scala

    英文版书籍,谨慎下载。 Actors 是并发程序的一个数据结构模型。基于Scala强大DSL功能,你可以利用Actor模型快速开发健壮高效的高性能并发计算程序。

    Artima.Actors.in.Scala.Mar.2011

    Actors in Scala is the authoritative guide to programming with the actors framework of Scala's standard library, co-written by the creator and lead maintainer, Philipp Haller. The book provides a ...

    Scala.Functional.Programming.Patterns.178398

    Grok and perform effective functional programming in Scala About This Book Understand functional programming patterns by comparing them with the traditional object-oriented design patterns Write ...

    kafka-on-actors:用于 Scala 的基于 Akka Actors 的 Kafka 消费者生产者

    Scala 的基于 Akka Actors 的 Kafka 消费者/生产者 支持卡夫卡 0.8.2.1 概念 Kafka 的消费者本质上是阻塞的,其想法是让消费者在自己的线程池中运行,并将消息委托给在自己的线程池中运行的 worker-actor,同时实现...

    akka in action

    Akka uses Actors-independently executing processes that communicate via message passing—as the foundation for fault-tolerant applications where individual actors can fail without crashing everything...

    hyrax:Scala 版本的 Hystrix 使用 Spray、akka actor 和 io

    ##概述#####Hyrax 是Scala 版本,使用 scala Futures/Promises 和 Akka Actors/ActorSystems 作为依赖弹性层。 它使用 Akka IO 来实现远程依赖。 它最初只支持 Web 服务,并使用 Spray 来处理 HTTP 请求/响应。 ...

    Effective Akka

    The book also includes examples of actor application types and two primary patterns of actor usage, the Extra Pattern and Cameo Pattern., Allen, the Director of Consulting for Typesafe—creator of ...

    Effective+Akka (1).zip

    the Director of Consulting for Typesafe—creator of Akka and the Scala programming language—examines actors with a banking-service use case throughout the book, using examples shown in Akka and Scala...

    ray_actors_cross_language_communication:用于测试Java actor与Python actor之间的通信可能性的实验回购

    鉴于此,应该有可能将actor句柄传递给远程跨语言任务/ actor,以在远程代码中本地使用actor句柄。 main.py代码执行以下操作: 在工作进程中实例化RayEcho actor。 在工作进程中实例化一些EchoClient Java actor...

    akka in action.zip

    Akka makes it relatively easy to build applications in the cloud or on devices with many cores that efficiently use the full capacity of the computing power available. It's a toolkit that provides an ...

    akka-irc:Scala 和 Akka 中类似 IRC 的简单客户端和服务器实现

    Scala 和 Akka 中类似 IRC 的简单客户端和服务器实现。 感谢 LSUG 的人为使它更像 Scala 所做的贡献。 怎么跑 这个程序需要安装 Simple Build Tool ,它要求你至少有 java 1.6。 build.sbt 文件包含所有需求定义和...

    akkajava.pdf

    We believe that writing correct ...Please note that all code samples compile, so if you want direct access to the sources, have a look over at the Akka Docs subproject on github: for Java and Scala.

    Akka基本知识:本书中的JavaScala示例-Akka Essentials

    您将在Java和Scala中找到Akka的示例,同时讨论一个概念以及一个已解决的问题 ClientServerExample:此示例演示了远程参与者在客户端/服务器模式下的工作方式。 客户端将消息发送到服务器,服务器回复给客户端。 该...

    akka-actors-examples:用Akka谈Actor基础的小样例程序

    这是一个关于如何在 Scala 2.10 和 Akka 2.2 中使用 Akka actor 的小例子集合

    play-meetings:使用Scala Actors和WebRTC构建的Web会议示例

    玩会议这是带有Scala |的Play Framework应用程序。 Akka | WebSockets。 如今,所有网络会议网络软件都使用Adobe Flash或桌面应用程序(Adobe Connect,Gometeeting)构建。 这是尝试检查js功能以实现相同功能的尝试...

    actors:(WIP) 适用于 Android 的最小演员库

    事件在 actor 中按顺序处理,因此不需要同步。 但是,由于 actor 是模块化的并且不共享任何状态,因此它们可以以多线程方式处理其事件,而不会增加任何额外的复杂性。 是一个很棒的库,用于与 actor 进行并发编程...

Global site tag (gtag.js) - Google Analytics