actor模型很牛逼,很流行,但是我不会,妈的,国内搜出来的讲解actor的都看不太懂,讲不太清,下面哥们就翻译一下老外的文章,以粗浅的方式体会一下到底什么是actor模型?
多线程开发要处理并发,锁,线程同步等一系列问题,一不小心,弄个大的bug,所以一般都不愿意自己动手写,能不能换一种思路,可以不可以介绍一种更高级的抽象模型,让我想实现多线程应用的时候,不用再考虑这些底层问题呢?
actor模型可以一定层度上帮你做到这一点。
从几个方面来讲解一下actor模型必须要解决的几个问题:
一、消息系统设计,或者叫线程间通信怎么做?
这里我们把要通信的线程想象成两个人,这俩人互相没法直接说话,都是通过邮件通信交流,假设这俩人一个是老师,一个是学生,他俩通信是通过邮件哈
那么:
1、学生要跟老师沟通,他就要发个邮件,邮件一旦发出,对不起,不能改任何东西了。你没有办法收回改了再发出去,这叫消息一旦发出,就不可改变。
就算你在邮件里不小心打了一行,我操你妈的,那也没法改了,邮件已经发出了。
2、老师那边呢,想什么时候看邮件,就什么时候看,这就叫异步,老师并不需要监听什么东西
3、老师看了你的邮件,可以给你回复,也可以啥都不干,但是他邮件一旦发出,同样不能收回来改——不可变性两端都一样的
4、学生也是想啥时候看邮件,就啥时候看,两边都是异步,都不会瞪着俩眼啥都不干,就等邮件过来
那么这种通信模型,很简单,但是就是actor模型想要的模型。其实看到这里,我们可以发现,这种通信方式,其实依赖一套邮件系统,或者叫消息管理系统
进程内部要有一套这样的系统,给每个线程弄一个独立的,收发信息的管道,并且都是异步的,写了不可更改的这样的数据系统。
二、并发性,或者叫人多了怎么办?
想想现在如果不是一个老师一个学生,而是三个老师三个