00:00
下面我们来看一下阿卡这个艾克模型的工作机制到底是怎么做的,那么我这里总结了这么几句话,这个做完了过后,我们马上写一个案例啊,咱们一步一步的来。先看一下他的这一个工作机制,他的工作机制是什么样子的呢?大家看这里,首先我们会先创建一个actor system。由这个a system呢,我们可以创建一个actor,比如我创建了一个a actor,创建好以后,假如我这个AA actor想给这个b act进行通讯,我怎么做的呢?非常的简单。我先。拿到就是我,我首先要拿到这个B的actor的这个。就是说看我这写的话,A actor如果想给自己发消息,就通过A的这个actor。
01:00
A actor想给b actor发消息,就需要持有,持有是什么呢?就是拥有获取的意思。持有什么呢?B的这个actor,这个actor refer呢,就是这个actor的一个引用,或者说一个代理。那么我们假设拿到这个act,然后又发消息,发消息其实准确的讲哈,它是由,它不是直接过来的,它中间有一个叫做dispature message,这个叫消息分发器。这个地方是一个呢,它是一个什么呢?它是一个线程词。这个地方是一个线程词。线程池,也就是说你所有的这个分发任务呢,都会交给他,由他来进行这个调度和管理。那么他在这边拿到你这个消息过后呢,他会找到这个对应的这个mailbox,那为什么要他呢?因为只有他才知道你的这个b actor在哪里。
02:00
他要管理的,就好像我们,我们要去这个,呃,我们打电话,我们说张三给李四打一个电话。那谁知道张三是在北京,李四是在广州?那谁知道李是在广州呢?不是你知道的。是谁知道,是我们那个一个那个中转我们的那个服务器,就是你的那个跟你通讯保持通讯那个中转站基站,他知道理事在广州,所以说你的消息,你你的这段话实际实际上先发给了那个我们那个那个基站,那个基站呢,如果他找不到,他会到到顶级再去找,找到哦李是在广州,于是他把你的这段语音转给了。在广州的鄙视这个消息的机制其实特别相似。他也是先把这个消息先交给这个dispatch message说你帮我管理吧。所以对他来说就特别简单。那么这个找到以后呢,他找到这个B的act,他把这个消息先发给这个b act的一个什么呢?Mailbox及邮箱。
03:06
这个mabox呢,这里面可以接收到你发过来的各种消息,至于这个消息是谁发过来的,它也有记忆,因为A可以给B发,那么C呢也可以给B发,所以说C也找到他,然后给他发过去,那么这地方就会有消息队列。消息对,他知道这个消息是谁的啊,他是很清楚的知道,因为这个消息里面会带上谁发给我的。那么一旦消息到达了mailbox,那么这个消息就会推送给我们这个b b actor拿到这个地方就可以做处理了。好,这是它的一个基本流程,所以你看我这写的这样子东西大家看啊,A actor要给自己发,就是a actor refer a actor要给b act发,就是找到B的act refer发过去,那么B里面做怎么拿到这个消息的呢?它这样子的b act里面有一个方法,就是这个act里面我们要重写它的一个方法,什么方法呢?叫receive这个方法,这个receive方法呢,会接收到消息并处理。
04:07
啊,并处理,当然有同学又说了,说老师假如B想回送这个B,这个A怎么办呢?注意,BB并不会一直等待啊,B不会在这等待你的消息过来,他不管。因为这个mailbox会主动推送给他。会主动推送给他,那么B如果要回送他呢,他这边会会有一个这个东西叫三。Thunder。这个sender这个呢,它会自动的获取到,谁给我发的,是A给我发的呢,还是B给我发的,他是能够知道的,于是他通过个sender呢,可以把消息再回送给对应的actor,这样就进行这个通讯了。好,这是他的一个工作机制,老师把这个工作机制呢,也在给大家整理了一下啊看a system act system是创建actor act refer理解成是act代理或引用,消息通过艾refer来发送,而不是通过艾发送的最新通过哪个艾refer消息发送,就表示把消息发送给哪个actor,消息发送到dispature message叫消息分发器,他得到消息后,将消息进行分发到对应的mailbox。再说一遍,消息不是直接发给actor,而是发给ior对应的mailbox。
05:24
这点别人会问你的,说老师你你说那么多,你写段代码嘛,我说了啊,代码一定要写,但是理论你不知道,别人问你,你密码蒙圈,因为你完全不知道这个代码是怎么运行的。待会儿呢,我还要针对代码,还要说那么注意dispat message呢,你可以理解成是一个线程词。Mailbox呢?你可以理解成是一个消息队列,可以缓冲多个队列,遵循fio就是先进先出的原则。谁先到。我先取出来,随后到我后取出来,叫做first in。
06:00
啊,这个first in,这个这个就先进先先进先出first in first out,那么act它接收消息呢,是receive,好,同学们,这是它的一个工作机制,呃,最后呢,还有一个消息机制,再聊一下啊,消息机制又什么样子呢?我们现在研究的是这个东西了。刚才是工作机制,现在我们说一个消息是怎么流动的,这个message是怎么流动的呢?好,我这里写了几句话,每一个消息就是一个message对象,Message它继承了run label,因为message就是一个线程类,那么挨个模型看起上去很麻烦,注意看我就写了啊,看上去还有刚才老师讲解了,你会觉得,哎呀,这个X模型太麻烦了。那还不如自己写呢。我说了,看上去很麻烦,但是程序员编程时只需要写艾就可以了,其他全部交给整个这个框架去做,所以说看上去很麻烦,但是写呢,反而很简单,因为为什么说很简单,因为在这个地方你不会去管这个东西,你看不到。
07:11
后台给你隐藏起来了,Mailbox你也看不到,包括这个消息怎么推过的你也看不到,也给你封装起来了,你只需要做一件事情,干什么呢?创建actor。找到。发消息这边就拿到了,中间整个这个过程对我们程序员全是透明的,就你看不到,跟透明人一样,根本不知道这是干什么的。好,所以说我这总结了一句话是什么呢?看上去很麻烦,实际很简单。那也就是说是很简单,有多简单呢,这样简单,AX给B法,只要拿到这个就行了,好同学们,那现在我把这个板输完,我们马上写一个案例啊,待会对照刚才老师的这个理论知识,再一认识就非常到位了,好同学们,我把刚才讲的这个内容呢,快速的给他板书一下啊,我说了。
08:07
原理性的东西,机制性的东西也是蛮重要的,所以说呢,刚才我花了点时间,希望大家能够理解啊,为什么说诶为什么不上来就写代码,不上面不上来就干代码呢?不是说代码干不了啊,就是说因为我们有些东西是需要大家了解一下的,好,各位朋友,我现在先写一个分页符,我们这讲的是这么一个东西,叫做什么呢?叫做并发模,并发编程模型之阿卡。来,给大家来一个标题,把刚才讲的快速的板书一下。好,快速的反思一下。好,我这里标题有点小问题啊,正文就可以了。好,呃,首先呢,我跟大家介绍了一下阿卡是是什么东西,至少你能回答上来,阿卡是一个编写并发模型的框架,这句话你要答上来,比如学了半天阿卡是什么我都不知道,那就麻烦了,对不对?好,首先你要把这个基本的有一个印象。
09:11
那么我们这做了一个阿卡的介绍。我整理了有这么。三句话,诶三句话呢,就浓缩了它的一个概念。啊,OK。浓缩了它的概念,第一个呢,就是你只要理解成这个东西了,阿卡是编写并发模型的一个框架,这句话记住就可以了。啊,这边呢,呃,这边我还有一张图,这张图就是这个actor所涉及的一系列的东西,比如像actor引申出来的,像actor system actor refer啊,还有PA已经出现了,包括还有一个叫actor pass,这个是进行远程通讯的时候要涉及到的一个概念,叫埃克pass。Act pass是什么呢?就是说如果你的actor都在本机,就不涉及到actor pass一个,但是我们将来更多的是我这有一台机器,我这有个actor,但是另外一个actor是在哪里呢?是在遥远的一个服务器上面,我要进行一个。
10:11
通互那个网络通讯,这就需要一个艾pass的概念,这个pass概念呢,后面大家马上就会涉及到,好,那么紧接着呢,我又讲了一下,艾克模型解决了什么问题啊,它可以解决什么问题。对,其实就是解决一个并发,并发的问题,好,我把它给同学们板述一下,我整理了几句话。哦,整理了三句话。所以它既可以实现这个并发,同时效率非常的高,底层他给我们做了啊,不像我们以前,呃,用这个什么呀,用这个Java呢,咱们还要自己搞一套这个的啊,那太累了,你搞不定啊,呃,那个性能肯定没法跟人家比,为什么Spark这么快,那是有道理的啊,因为它融入了很多。比较牛的这种小框架,它本身是个大的语言,又融入了很多小框架,那么我又讲了阿卡的一个艾克模型,诶,我画了一张图。
11:10
对吧,我画了一张图,我说了一下阿卡的它的一个actor模型,为什么说A模型呢?因为阿卡的核心就是actor,换言之,阿卡里面全是actor啊,你可以这么去理解,好,那这个图呢,我给同学们也板书到这里,好朋友们,这是刚才我们讲的这么一点模型的说明。啊,标题三。啊,标题三在哪去了这。好,然后呢,这整整理了这么几句话,我就快速的给他写一下。好。然后这张图呢,我也给同学们拿过来。好,这张图我就放在这个位置啊,一张小图放在这儿。好,把它往上挪一下。好,这是我们说的这三点,那么下面呢,还有几句话,也把它一句一并拿过来。
12:04
哦,还有这么几句话,我把它放到这里啊,这是第四。对吧,第四第五六啊,这就OK了,我就不再去一个念了啊,不再一个念了啊,艾阿卡是一个异步的非主塞的,为什么说为什么他牛呢,他既能并发还是非阻塞者,这就底层做了很多工作啊。如果能把阿卡的源代码全部看懂了,那说句实话,你的这个并发非阻塞这块就学到位了啊,因为它本身幼是并发还是非阻塞异步的,这个就相当有啊,相当有就一般的是很难很难达到这个标准的啊,框架达不到这个标准,然后呢,我画了一个图,这是这是我我自己去画的啊,画了一个图,画了一个什么呢?就是工作机制的一个图。这个为我们写代码呢,打下一个基础。好,我这写了一个actor模型工作机制的一个图的说明,好给大家写到这儿,那么具体来说呢,就是这么一个图。
13:04
好,这个图呢,我就整体截过来了。整体移过来了啊。好,拿到我们的李一中去。然后呢,针对这个图呢,我做了一些说明啊,这个图我做了,我做了两点说明,一个是工作机制的说明,一个是消息发送机制说明,说明什么呢?说明。说明了这个actor模型,好,Actor模型的一个工作机制,好,我来给他来一个小箭头,还说了说明什么呢?就是它的一个actor这个模型。Actor这个模型。模型的这个消息机制,好,这是我讲了讲了针对这个图说明啊,针对这个图。就是针对刚才这个图,针对上图的说明啊,对应啊对应上图。好,这个呢也是对应上图,我把这个呢整理到这里。
14:03
对上说这个东西你只要经常去做这个整理,那你的这个就好,成长很快,好我把它放到这里来,一共有四点。就是除了这个图呢,我还配了一些文字的说明。啊,配了文字的说明。OK,这是说明了四点,然后呢,消息这个机制呢,我说明了这么三点,OK。好,我把它放到这里来。好三点,那分别是每个消息呢,它是一个message对象啊,其实它是一个线程类。好,然后a actor呢,给b actor,它要发的是哪有持有好同学们,那关于这个actor模型啊,我们就先介绍到这里。
我来说两句