关于并发性:Scala:你知道任何高级的Actors文档/教程吗?

Scala: Do you know any advanced Actors docs / tutorials?

我已经和scala合作了一段时间,并且开始深入研究并发性。凭借我的Java并发知识,我已经完成了我必须做的一些简单的事情,但我正在努力挖掘更多的演员世界。

问题是我找不到任何高级教程或文档,而不是这个:

http://docs.scala-lang.org/overview/core/actors.html(非常好的btw)

当然,我已经阅读了API,但是我想要一些代码示例、良好实践、建议等。

注:我指的是关于主流文档中未包含的内容的文档。我知道演员的核心概念。另外,我读过这些书:

scala中的编程:全面的分步指南,第2版

编程scala:可伸缩性=功能编程+对象

编辑:谢谢你的回答。我知道有关演员的书,但我在找免费的萨特夫。


我的出发点是读一些二郎的教程,比如学习一些二郎的好东西。二郎已经存在一段时间了,有很多教程、书籍和演示文稿。Erlang的核心是actor模型,即在不共享的actor之间传递消息(在Erlang中称为进程),因此这是一个很好的方法来了解概念。

然后,当您使用scala语法时,使用akka,因为它的api比基本scala参与者更接近erlang。从根本上讲,使用akka的scala中的参与者非常简单。真正的挑战是接受一个设计,并以没有共享数据的参与者的角度重新进行设计。Scala有一种诱惑,就是使用一些Java库和一些面向对象的设计,最后得到一些与演员不太兼容的东西。

我建议从演员的角度出发,设计出一个可行的设计,然后用Java类和面向对象的技术来增强它。例如,在我的第一个基于AKKA的应用程序中,我使用普通的Java AMQP库来消耗消息而不是AKKA抽象,因为Java类是简单的,并且我已经非常熟悉AMQP。


还有这本书。它写得很好,虽然当我读到它的时候,它根本没有提到阿卡,这有点尴尬,因为阿卡经常被使用。事实上,如果在不久的将来斯卡拉自己的演员和阿卡的演员之间有某种融合(朝向阿卡的模式),我不会感到惊讶。

Actors in Scala


下面是我编写的一个小代码示例,它使用akka actors解决了项目Euler的一个问题。它使用的参与者有点像map/reduce操作,其中工作人员并行处理数据块,并将结果发送给收集器。整个过程是异步的,可以(假设地)扩展到数千或数百万个节点。

代码已经经历了几次迭代,因为我已经了解了更多关于如何使用参与者的知识(我还在学习!)因此,查看早期的修订可能会让您了解我是如何得出当前设计的。