今天学Spark的时候,看到Scala的actor模式是一个加分点。所以搜了一下,看了。主要参考下面两篇文章,还没有实验,有些地方领会的不深刻:
http://nxlhero.blog.51cto.com/962631/1666250
十分钟理解Actor模式
Actor模式是一种并发模型,与另一种模型共享内存完全相反,Actor模型share nothing。所有的线程(或进程)通过消息传递的方式进行合作,这些线程(或进程)称为Actor。共享内存更适合单机多核的并发编程,而且共享带来的问题很多,编程也困难。随着多核时代和分布式系统的到来,共享模型已经不太适合并发编程,因此几十年前就已经出现的Actor模型又重新受到了人们的重视。MapReduce就是一种典型的Actor模式,而在语言级对Actor支持的编程语言Erlang又重新火了起来,Scala也提供了Actor,但是并不是在语言层面支持,Java也有第三方的Actor包,Go语言channel机制也是一种类Actor模型。
多线程/分布式编程-Actor模型
到了分布式系统时代,工厂已经用流水线了,每个人都有明确分工,这就是Actor模式。每个线程都是一个Actor,这些Actor不共享任何内存,所有的数据都是通过消息传递的方式进行的。
用scala实现,下面是工程的结构:
这是它们传递的消息,有一些指令,剩下的都是Int数据:
一个Actor的代码结构一般是下面这种结构,不停的接受消息并处理,没有消息就等待:
组装者代码:
分发者代码:
加工者代码:
主线程代码:
这个代码实现的效果与前面用Java实现的是一样的,但是各个线程没有共享内存,也没有锁,这样开发起来容易,而且更适合分布式编程,因为分布式编程本身就不适合共享内存。
Scala的Actor不能原生的支持分布式,但是Erlang可以,使用Erlang的Actor,分布式编程就和本地编程基本一样。但是Erlang的语法难懂,而且没有变量,几乎所有需要使用循环的地方都得用递归。
但是,没有找到附件。算了。
还有这篇文章:
http://www.cnblogs.com/shiyangxt/archive/2011/07/30/2121663.html