00:00
下边我们来看看,看看阿卡这个它的action模型及他的一个工作的一个流程,好,我把它放大一点,同学们可以看到这有一张图,这个图呢是用一个大的一个框框框起来,并给他取了个名字叫actor system。那就意味着整个这些组件。这些组件都是运行在我们这个actor这个系统之中的。这也就是说这些对象呢,都归我们actor system进行管理,不能独立的看。那么我们看到这分别有三种颜色,红、黄、蓝三种颜色,这里面出现了三个actor。三个actor,那么每一个actor呢,都有自己对应的一个邮箱叫mailbox,这个mailbox呢,在我们使用的时候你是看不到的,它被封装到了这个actor system这个系统里面。
01:04
那么它的机制是这样子的,整个机制是通过一个信箱信件,这个叫message,叫消息。他怎么通讯呢?比如说a actor就是个红色的actor,要给这个绿黄色的actor进行通讯,他怎么做的呢?他首先拿到这个。黄色艾的那个refer,就是他的那个代理对象,或者叫引用对象,然后通过这个对象呢,发一个消息到哪里去呢?注意到这个黄色I的邮箱。这个邮箱是跟这个I绑定的。啊,至于怎么绑定,是交给这个模型去处理的,当信息到达这个mailbox过后,注意他就是对象啊,对象他拿到这个mailbox,拿到过后他怎么拿呢?这个mailbox它是一个实现了run label的。
02:06
一个线程啊,你可以认为这个mailbox是个对象,它实现这个run label的一个接口,那就是说它其实是一一直运行的,等待别人给他发消息,他一旦拿到消息过后,他就会去把这个消息推送给这个actor。的哪一个东西呢?它会推送给这个or的一个叫receiver的一个方法,SESE这个方法,Receive receive这个方法,那么这个actor就拿到了信息。反过来,Actor黄色信息要给红色回送一个消息又怎么办呢?他也必须持有对方的这个引用。好。然后他也可以发消息过去,大致就是这样子,那么现在呢,我刚才说的这些东西我都总结了,总结成几句话了,我们来把这个几句话再给大家看一下,大家看这里,上面这个图是阿卡处理并发。
03:07
的方法及,而阿卡处理并发的方法是基于艾克的模型。如这个模型。那么在基于阿的这个act的系统里面,所有事物均为actor啊,在他的眼里面都是这个角色。Actor就是角色演员的意思嘛,我们翻译出来就是角色,就好像在面向对象里面,我们所说的所有的事物都是对象一样,在呃,这个actor模型里面全部都是actor。那么actor这个模型是作为并发这个架构设计的,Actor和actor之间只能通过消息来通讯。啊,他只能通过消息通讯,你发别的他不认好,那么刚才老师这个说到这里好,紧接着呢,我这里还有。几句话我一并说了。Actor和actor之间呢,通过消息通讯,当一个actor要给另外一个actor发消息时,消息是有顺序的,也就是说他这个消息呢,是一个存放在mailbox里面的一个队列。
04:14
也就是说,消息它会按队列的形式来存放,我们把它称之为消息队列。那么。而只需要将消息投递到相应的邮箱即可,比如说刚才的这个图,我只要投递到这个邮箱就可以了。那么怎么处理消息是由接收消息的actor来决定的,发送消息的actor可以等待回复,也可以异步处理,这点很重要。他可以等着你给我回复,我再去干别的事情,我也可以异步处理。什么叫异步处理呢?待会儿我给大家找一个案例,最经典的异步处理就是阿贾克斯,同学们在学这个语言的时候,你们在学呃,前端的候应该学过一个叫阿贾克斯,可能我不知道阿贾克斯你们学过没有。
05:07
学过,那么阿贾克斯就是最经典的一个异步处理了,他的一个请求发过去。我不用等待对方回应。我这个浏览器是处于一个。可以向下执行的流程。啊,那么这是它是可以等待,也可以异步处理,还有actor system是职责是负责创建并管理其对应的actor actor system是单立的,也就大家要知道,在整个应用程序里面,我们这个actor system只有一个,它就好比是一个工厂。你可以这样理解,就可以理解成可以理解actor system是。一个工厂是一个工厂,干什么呢?专门专门生产或者创建什么呢?Actor?
06:00
你只是你需要什么actor,你就到这个actor system去创建就可以了。那么在一个接机中,这个actor system只有一个。但是actor。是有多个的。第七句话,挨个模型针对并发进行了更高的抽象,就是说刚才你们看到的这些东西,邮箱这个mailbox你们是看不到的,它被封装起来了。好,艾的模型是异步的,非阻塞的,高性能的这种事件驱动编程模型,那么这里面呢,要给大家讲一下,简单的说一下什么叫做这个异步处理,我用一个最经典的阿贾克斯画一个图帮助大家理解,你可以这样理解。你可以这样理解这个异步的模型,我们可以先到网上来看看有没有这样类似的图,我们随机的搜一个啊,百度啊百度。
07:00
好,我们找一个图片吧,干脆就找一个图片image。I点百度很多图形呢,在这也看得很清晰,咱们就这样说叫阿贾克斯异步。异步处理。异步处理回车。好回车,回车过后呢,我们就可以看到很多的图片。大家看这个图片很多,我们看,哎,这个第一个图片怎么这么相识,似曾相识的样子呢。这个图片怎么看着好像是我以前讲的呢,啊怎么好诡异啊,这个玩意诶打开看一下,这不写的韩顺屏幕,这是我的吧,这是零六年讲的,这个图片还在这出现了,非常的这个亲切是吧,这边写的我当时举的例子就是说韩老师让一个同学去买绝味鸭脖,还在吗?这这速度好慢啊,这个诶诶还真是,你看还真是我讲的嘞,还真是我讲的,不说韩老师吧,韩老师诶我当时就这样,我说买绝味鸭脖去了,我在韩老师这找一个峰哥帮我去买绝味鸭鸭脖,好也大致这个,其实这个图画的当时不是特别的精准,但是呢,同同学们学完还是可以的,就是这是06年12年前以前,12年以前讲的啊,这一八年就是零六年讲的,好这个图我不看,这个图了,我换个别的图吧。
08:25
这有些图看的不是哦,这图画的太复杂了,我给你们画一个,画一个更更形象的,可以这样理解。可以怎么理解这个这个东西呢,可以这样理解。就说这边有一个,这是我们的浏览器啊浏览器。浏览浏览器,好,这边是我们的服务器,你可以这样理解。哦,这是我们的服务器。服务器,那那怎么去处理呢?假如我这里有一段代码。
09:01
假如我这里有一段代码,这段代码呢?我发出了一个阿贾克斯请求。二二价格请求,那么这个请求就直接奔哪里去呢?奔这个服务器去了。啊奔,服气了,如果我们没有用阿贾克斯,他是这样子的啊,同学们,假如我们没有用阿贾克斯,没有用阿贾克斯他会怎么办呢?就是你一个请求过去了,我们的浏览器就一直在这里等待。就是你你这个请求不回来,我这个页面就一直在那转转转转转到什么时候呢,直到你回来就说你你这个请求发过去,这边如果没有响应,那么浏览器就会一直在这里等待,你什么事情都干不了。这个就叫同步,就我必须等待你回应的一个结果,我才能看,后面发现这个事情很糟糕,所以说在零五年的时候呢,阿贾克斯这个技术就推行出来,整个阿贾克斯出来时候特别火,好多网站,因为阿贾克斯把整个网站那个前端部分全部改写。
10:05
为什么要全部改写呢?因为你不全部改写,特别耗费技能技那那个那个性能说他出来过好多门户网站,那个时候大量招,大量的招这个阿贾克斯程序员。招了很多哦,现在当然阿贾克斯已经成为一种最基本的一种技能了,比如你们在学阿贾克斯的时候学过应该学过阿贾克斯一种跨赞,跨赞访问的那个他是,但你们都你们不是前端人员,倒倒也无所谓啊,但是你还是听一下好,我们来回回头说阿贾克斯怎么做的,他这样子的阿贾克斯请求拿过去过后,假如这是我们的浏览器,那么这时呢,浏览器可以继续执行。也就是说,我不需要等待你回应,那我可以干什么呢?我可以继续向下执行。我可以继续执行。继续执行,你这地方回不回来,对我向下执行没有影响。
11:01
没有影响,那么你这边服务器回应的过后怎么办呢?我用了另外一个模块,这个模块呢叫做回调函数。应该,同学们还回到这有个回调函数。啊,这个回调函数是专门处理你的这个请求响应的,就是说你将来这个地方,如果你这回来了,好,你这回调函数就专门处理你的结果,这地方呢,它一般是会进行这个什么呢?接收接收这个返回,返回的这个结果。并进行这个动编程,一般会进行动编程,比如说把我们当前页面进行一个改写,就进行一个动编程。好,这样就实现了一个有效的一个异步,什么叫异步,就异步,体现在哪里呢?体现在你这条线。执了过后不影响我向下执行,而原先因为没有这个阿贾克斯引擎,没有这两大块怎么办呢?当我们以前没有这两大块的时候,你这个地方你这过来过必须等大回回回送,所以说这个性能就很差,现在有了阿贾克斯这个异步就处理了,所以它执行的顺序呢,就你打过去。
12:10
这两条线顺序。不一定非要一致,不不是说等到你在天线来了,我才能执行这条线一步就出现了,那我们这个阿卡呢,也有这种。这种非常相似的效果,就是我的一个消息打给你过后,你怎么处理是你的事,我不管我该怎么走,我还继续走,诶这个就非常的好,好最后一个阿卡呢,它这个模型是一个轻量级的事件,也就是说他一个actor是一个很轻量级的,它是走的现成的模式,它的底层。它的底层呢是走的线程模式,因此一个GB一个一个GB的内存就可以容纳上百万级别的actor,因此处理大并发性能很高,目前呢,在我们Spark里面用的这种并发。
13:00
啊,都是用的阿卡。好,这是老师对他的一个简单的啊模型的一个说明,我再截取一段视频。
我来说两句