Actor模式是一种并发模型

  • 与共享内存模型完全相反,Actor模型share nothing
  • 所有的线程(或进程)通过消息传递的方式进行合作,这些线程(或进程)称为Actor

背景:

  • 共享内存更适合单机多核的并发编程,而且共享带来的问题很多,编程也困难
  • 随着多核时代和分布式系统的到来,共享模型已经不太适合并发编程,因此几十年前就已经出现的Actor模型又重新受到了人们的重视

情况:

  • MapReduce就是一种典型的Actor模式
  • 在语言级对Actor支持的编程语言Erlang又重新火了起来
  • Scala也提供了Actor,但是并不是在语言层面支持
  • Java也有第三方的Actor包
  • Go语言channel机制也是一种类Actor模型

历史

单核单机时代:单线程编程

单核单机时代一般都是单线程编程

如果把程序比作一个工厂,那么只有一个工人,这个工人负责所有的事情,所有的原料,工具产品等都放到一个地方,因为只有一个人,因此使用一套工具就行,取原料也不用排队等
image.png

多核时代:多线程编程(共享内存)

到了多核时代,有多个工人,这些工人共同使用一个仓库和车间,干什么都要排队。
比如

  • 我要从一块钢料切出一块来用,我得等别人先用完
  • 有个扳手,另一个人在用,我得等他用完
  • 两个人都要用一个切割机从一块钢材切一块钢铁下来用,但是一个人拿到了钢材,一个人拿到了切割机,他们互相都不退让,结果谁都干不了活

image.png

分布式时代:Actor模型

到了分布式系统时代,工厂已经用流水线了,每个人都有明确分工,这就是Actor模式。

每个线程都是一个Actor,这些Actor不共享任何内存,所有的数据都是通过消息传递的方式进行的。
image.png

参考链接

  1. 十分钟理解Actor模式
  2. Actor模型是解决高并发的终极解决方案