00:00
好了,接下来我们讲一下任务的执行吧,同学们,那么任务的执行啊,我们刚才说过了,我们已经啊,通过我们的任务的调度,已经知道要发给哪个excuor了,那我们就会发送一条消息,对吧?那么这个消息我发过去以后,对方是不是应该收到消息呢?所以我们来找一下啊,咱们叫executor,咱们的back end把它找到,找到以后他这边干嘛呢?应该收消息吧,所以来拷贝,那么拷贝以后他应该能够收到这个消息,大家看就在这儿了,那么这个地方就有一个叫receive,他给他收到消息,那么收到消息的时候他就判断了,如果计算对象等于空,它会发生错误,如果计算对象不为空怎么办?他会把我们当前的肉给它反序列化,叫做解码,我们在前面这个地方,大家看一下是不是把咱们的任务给它引扣的了,叫编码了,其实就是序列化了,对吧,但是呢,我们在这儿给他解码。
01:00
没问题,反序列化,然后呢,接着往下来,怎么了,叫execu.LA task是不是启动task了,是不是我们的计算对象执行这个操作,并且把咱们任务的数据给他传了过来吧,哎,所以他就开始执行了,咱们点,点完了以后,你会发现在咱们当前的ex back里面看不看啊,我这里呢,还得给大家画一个图啊,还得画一个图,咱们往下往下,呃,往下以后咱们在这个位置啊,给它拿过来。把这个呢,放过来啊,放过来以后放到这边,我放到这边啊,然后来我们写上,呃,咱们这地方叫做ex,咱们叫back end,好了,这就是我们这个通信的后台了,嗯,然后字体呢,给它稍微的变大一些,那接下来咱们往下看,往下看在咱们的这个里面,大家看是不是有个什么东西啊,叫做task runner,而且有没有发现有一个叫ad po叫线程词,咱们在计算对象,记住同学们,咱们在这个地方,其实我不应该加它它了啊,把这个去掉,这个是我们的计算对象,计算对象当中有一个什么线程词啊,同学们,咱们用一个紫色也可以啊,然后呢,有一个线程词的话,那咱们这里的把这个线程词的概念拿过来了,所以我们再来吧,拷贝。
02:21
拷贝以后把这个线程值呢,给它缩小一下啊,给它,诶把它挪到这来,然后呢,拉大一下放到这边,那这个呢,我们拷贝,拷贝以后放过来,咱们叫做什么呢?叫thad cool,好,那我现在呢,把这个颜色呢,咱们标红一下吧,咱们标红一下啊好,这是我们的线程词,那么线程词当中它干什么了呢?它这里面就可以开始执行,它会把咱们的task runner task runner,这是我们的运行任务的一个对象给它传进去,传进去就开始运行一个任务了,那说的简单点就是来一个task哥,我处理一个task,来一个task,我处一个task,那是不是意味着我们这个task runner其实应该是个线程或者说可运行的对象呢?
03:06
啊,就跟线程感觉很像,对不对,所以呀,那我们现在这个图形当中,就意味着我们slide铺当中应该有很多线程,每个线程应该执行不同的task,能不能明白同学们,所以啊,我们这里拷贝,诶拷贝拷贝之后把这个拿过来,比方说这就是一个什么呢?我们的thread,嗯,线程池中会有很多的thread线程吧,好颜色呢,给它标识一下来,我们给它一个绿色吧。好了,放过来啊,放过来,放过来以后,同学们关键点来了,他们这个线程里面是不是应该去干嘛有我们的task呀,所以我们给个蓝色啊,给个蓝色,嗯,蓝色呢在这儿,好,这个地方我们应该拷贝它,这个地方就是我们的task,哎,好了,再来把这个task放过来,然后我们这里呢,来放过来,咱们放到这啊,然后放到这里好了,同学们看,那这个时候我们的这个task不就是OK了吗?哎,我们的计算对象就可以用线程词当中的线程来执行每一个task,那么你来执行task的时候,那么我们的runable,它里面就会有一个什么咱们的run方法,Run方法呢在这儿。
04:18
可运行吗?那么你run方法当中,咱们往下看看关键性的点,同学们,咱们往下走,往下走,往下走,你看怎么了?是不是我们的task就开始运行了,那么你有多少个task在这个地方它都可以开始运行,它运行的时候你点击run,你点击run以后,你会发现它里面有这么一个方法,这个方法叫做什么呢?咱们找一下叫run task叫运行任务,而这个方法呢,是我们的抽象方法,那就意味着每一个具体的任务要重写运行的规则。这个能不能明白,同学们,所以啊,真正我们运行的任务其实是我们的计算对象来运行的,但是运行的逻辑在每个任务当中就是这个意思啊。
我来说两句