View on GitHub

ScalaProgramming

《 Scala 程序设计(第 2 版)》学习笔记

并发

Scala 有许多诱人之处,能够使用 Akka API 通过直观的 actor 模式构建健壮的并发应用便是其中之一。

在 actor 并发模型中, actor 是独立的软件实体,它们之间并不共享任何可变状态信息。
actor 之间无须共享信息,通过交换消息的方式便可进行通信。

Actor 示例

我们会将表示几何图形的一组类的实例发送给一个 actor ,该 actor 再将这组实例绘制到显示器上。
你可以想象这样一个场景: 渲染工厂 ( rendering farm )在为动画生成场景。
一旦场景渲染完毕,构成场景的几何图形便会被发送给某一 actor 进行展示。

定义 Shape 类:Shape.scala

伴生对象其实与下列代码生成的对象无异:

def apply(x:Double=0.0, y:Double=0.0) = new Point(x,y)
定义 ShapesDrawingActor 类:ShapesDrawingActor.scala

假如某一方法只接受单一参数,你可以省略掉对象后的点号和参数周边的括号。 下面两行代码是等价的:

sender ! Response(s"ShapesDrawingActor: $s drawn")
sender.!(Response(s"ShapesDrawingActor: $s drawn"))
定义 ShapesDrawingDriver 类:ShapesDrawingDriver.scala