00:00
各位同学,我们继续,那么通过前面的讲解,我们明白get的方法容易引起阻塞,一旦调用get方法求结果,那么如果计算没有完成,非常容易导致我们的程序变成阻塞状态,那么这样的话,系统的性能是不是会急剧下降啊?好,这是它的第一个缺点,那么第二个缺点呢?我们先说结论,那就是轮巡容易导致CPU空转,耗费更多的系统资源。好,那这个什么is done又是什么意思呢?那实际工作当中是不是直接就这么直不楞登的调用get的方法来获得我们的返回值呢?答案是否定的。好,我们呢,在讲第二个缺点之前,我们先回到我们的第一个电的方法,那么大家请看。先恢复它。你呢?要需要处理时间是五秒钟,但是抱歉,我只愿意等待三秒钟,那么好,这个时候确实没有导致我们后面的调用系统形成阻塞,因为我只愿意等三秒吗?三秒以后我抛出timeout exception。
01:02
那么如果其他系统补货了,一定程度上可以避免我们的阻塞。但是。不优雅,不健壮,毕竟抛出了exception,如果我们的后台或者我们的日志里面有大量的exception,我相信你也不好和测试或者老板交代吧。哎,这个可以用,但是不优雅。那么第二个。Get塔那不多说了,那么下面呢,我们来看看get。我现在放到最后了,到时阻塞上急剧下降,这种情况呢,会。减少,但是我们发现在等的过程当中,就这么一直干巴巴的等着,我们最希望什么?是不是后台也最少给我们打出点提示啊,那么目前的处理的进度是怎么样呢?哎,这是其一其二。我们现在呢,也希望什么。我们在调get容易导致阻塞,也就是说假设你没有计算完成的时候,我去调用容易导致阻塞,那么我们能不能这样就调用一次啊,你什么时候完成了,我什么时候来调用,OK,给我一个状态,如果你完成了,我就来调用,这样是不是就不会容易导致阻塞呀?好的,所以说我们的第二种方法,那么就是。
02:10
我们现在呢,我要出。因为你这个get不是这么简单的使用的,直白的说,实际工作中不可以这么用,非常容易导致我们的阻塞,我们必须要有状态的判断。那么Y要处。如果你这个future task。Future task is done,假设已经完成了,OK,那么现在我们呢,直接过来取得你这个结果,取完了以后我再补瑞克,否则的话,那么就像我们刚才所说,我们呢,不停的在这完成了吗?完成了吗?那么一定时间间隔,比如说我。500毫秒或者是1000毫秒,问你一次,那假设啊,我们这儿呢,就500。那么现在意思就是说,如果这个future task。已经完成了,那么现在得到我们的结果,然后退出我们的是吗?我要出轮询状态,否则的话,那么同学们,我们在这儿。
03:05
继续轮询,那么我们也不要轮询的太多次,对吧,有点间隔,否则的话,你每次去问的太多了,只会加大CPU的耗损和系统资源的占用,那么在这儿我们可以告诉他,那么比如说正在处理中。不要再吹了。那么越催。越慢对吧,再催熄火。OK,好,那么同学们,我们答案呢?搂一眼,大家请看,这样的话会不会比前面效果好一点点呢?来,还是五秒钟,我们直接跑一下我们的程序。大家请看,现在程序进来了,May去忙其他任务了,那么T一进来了,也正在处理,那么正在处理中,不要再催了,那么这样大家请看后台是不是有点提示啊,那么别的系统或者我们的运维人员或者测试人员也知道了目前程序的状态,那么最终五秒钟以后到了,我们确实发现这个future task的状态is done是true,它确实已经完成了,那么我们打出我们的get只调用一次,而且是你完成了以后我再来找你,那么这样是不是不容易导致我们的阻塞,完了以后我们break,跳出我们的循环,OK,所以说这个就是我们的is弹用状态判断,然后不停的轮巡来使用我们的get方法,那么这个自然而然会比前面好。
04:26
但是请问它又有什么缺点呢?同学们思考一下,它的缺点是不是就是这个外处,我需要不停的轮询,虽然说我可以用这个来控制一下反问的频率和次数,但是毕竟。我们会出现的方法会耗费无谓的CPU资源,而且也不见得能够及时的得到计算结果。那么通过前面的演示,同学们尽收眼底,我们这儿是不是更多的是L这个分支啊?哎,所以说呢,后台要打出来这么多也不好看,那么现在我们就特别的希望有有一种改良的措施啊,那么如果想要异步的获取结果,通常都会以轮训的方式去获取结果,尽量不要阻塞,所以说我们的最佳实践,第一个问题希望大家如果你要用future task这段可以加上OK,好,这是第一个,那么第二个我们得到的结论是什么呢?
05:23
Future对于结果的获取都不是很友好,只能通过什么要么容易阻塞,要么轮询耗费CPU资源来获得。那么针对上述两个缺点,结合我们一些新的需求,我们慢慢的就明白了为什么我们要学习看future,那么自然而然他是不是可以规避或者是减少这两个缺点啊?哎,这个呢,就是一步一步的带着大家通过案例和代码说出底层的数计思想和演变过程。好,同学们,这个就是我们的第二个缺点。
我来说两句