00:00
那么现在呢,有一个地方我想给他证明一下啊,尽管这个意义不是很大,我还是说一下,如果我们用了这个growth加China进行这个并发,现在我们实际上是并行,我们现在是并行,因为我作用在四个CPU上的,那么到底我们这个效率真的提高了没有呢?大家肯定有所候怀疑,说老师那是啊,我又到底。能不能有效执行呢?好,这样子我们来这样说啊,使用完成后,可以再用传统的方法来统计一下,看看到底我们这个时间提高了多少倍啊,那么大家可以推一下,你们认为应该提高了多少倍呢?理论上来说应该提高了四倍,因为我是个CPU嘛,好,我们来简单的证明一下这个事儿啊,这个呢,教大家以后怎么去测项目的,很简单几句话的事啊,我们来看我们代码是从这里开始玩的。哦,我们我们从这里开始啊put number是就算开始做这个工作了,所以说我先把时间统计出来,这是个star。
01:03
是的,等于time。Time这个包包下面有个no,这个no呢,我把当前的这个unx的这个时间拿到好,这个就是当前的一个UN的时间出,这个我们先讲过,那么同学们想一想,什么时候算这个结束了。什么算我们这个任务就完成了,统计这个输出任务完成了。不不不不能算这个打印吧,打印是不是已经是跟打印有关系,跟我们这个任务没有关系了,理论上说是不是应该close掉这个就算是这个任务完成了呀。你跟打印没关系啊,打印打印他又不是去统计输出了,所以说我们应该在哪里去判断呢?就说他一旦拿到了四个退出这个标志,就说明我们这个任务完成好,我在这里呢,再给同学们来做一个时间,这个就叫我们的N的一个时间,注意听啊,虽然有时候我们去需要统计一下我们效率好点什么呢?Unix。
02:03
好,很非常简单,各位同学,那现在呢,我呢就这样子给他来一个数据,好,我直接打印出耗费的时间使用啊,各位同学使用携程,携程这个时间耗时耗时多少呢?来给他一个描述,非常简单啊,就是刚才那个end end呢减掉一个star就可以了,非常简单,那这个做完以后呢,我们现在可以跑一跑。啊,我们可以跑看看呃,数据多少,我们把它调成八千八千。8000,那么为了看到这个效果呢,我我就直接把这个打印先关闭了,因为打印太费时间了,8000要等好久,所以说呢,我现在把这个处理一下啊,8000那为了安全,我这个开大一点吧,啊开大一点,因为我担心放不进去。好,那么这样子啊,这个打印我们就先不打了啊,不打了,呃,其实已经已经有了啊,肯定是有的,我就不打了。
03:03
因为我们真正的卡,我我们真正等待他完成任务,其实关键是在这个地方跟你打印没有关系,明白我意思吧,啊,你打印没有关系,只是我没取而已,好同学们看一下,此时此刻我运行一下我们这个代码,我们跑一把走。好,同学们,哎,我时间怎么没打出来呢?我们看那应该是,诶它为什么这个地方就直接没有进到这边来呢。哦,对,我这样是这样子说啊,诶我想想啊,同学们我想想。去掉。把那个去掉。Go那个。统计这地方应该有个时间呢,按理说它怎么没进到这里面来呢,因为你这个函数里面只有。
04:15
色。也是在协。那这个地方我们取是吧,就是取,因为对那这方因为你就取,没有没有没有没有等待就跑了是吧,那我们应该怎么打,你这个时间在哪打呢。把这个取掉就行了是吧。把这个去掉就行了,把这个去掉就行了,就我不打这个东西就完了。对,那这个res呢,我可以对,我可以这样处理,我先暂时不用它就行了,对是这意思,好这段我先暂时不用它,我不打我不打印。我不打印,其他都保保存,就是我相当说取的时候呢,时间我们还是把它打印出来,来走一个。
05:01
对,好看一下。8000。毕竟祖宗满这玩意儿。啊,因为他把这个东西要放到里面去。Yeah。那8000很久啊,换一个时间短一点的,看看能不能出来,我换一个,呃,1000吧,换一个1000。把它换成1000的数据。哦哦,刚才有同学提到这一点呢,还真是应该是这导致的。这边有个实力,我说怎么这么慢呢。说这么慢都不可能啊。再来一个。好,差不多差不多,但这个时间就正确了哈,跟我想的很像,但是刚才我们是1000,这个我们还还是上放8000个数据。还是放8000个数据,刚才我们往里面放的时候七八千是吧,8000我们花了一共有一秒钟,就相当于这个事呢,我们花了一秒,诶怎么这么快。
06:11
这个8000还有点儿。八万八万,这个有点太吓人了啊。哪时更?好,这样就可以了,来再看一下。好,这个数时间应该统计出来一秒,一秒怎么这么快呢?感觉没有没有。不是他我知道我知道,但是他也不至于这么快啊,八万八万来个8万。对。8万不够是吗?我这儿开了多少个空间啊?8000,那开个2万吧。主要是这个这个无所谓啊,这个无所谓。好,再来一个。
07:02
看一下这个结果。好,差不多两秒,好,现在我把这个数据稍微改一改,我们看看如果用传统的写法啊,它一共是多少时间,那这个时候呢,我们这样做一个测试,测测试啊,刚才是写到这的,我们新建一个简单的文件,把代码粘过来就行了,做一个测试,然后在这里呢,我写一个简单的文件,叫做test,顶go pack go,然后呢,我把这个粘过来,Package,传统的写法,Package主包啊,Package import import,然后里面呢,呃,把这个时间引进去。好,写个fun me。好在这里面呢,我们直接用for循环,直接用for循环,那for循环的话是把这段代码粘过来就可以了,把哪段代码呢,就是把刚才写的这段代码apply这。我们只需要把统计统计这个呃,代码粘过来,看这里,这个代码是我要的。
08:02
啊,这段代码是我要的。然后呢,我把它拿到这边来,诶拿到这边来看一下。这边呢,呃,我用一个Y乘for循环for for好I等于I等于一,I小于等于多少呢?2万啊,刚才是八万八万。对,然后呢,I加加,I加加完了过后,我把这个代码整体放到这边来。哎,那么放在放过来过后呢,这边做一个调整,就是这个number这个这个地方呢,我们把它改成。啊,改成number吧,干脆number从这开始取,Number这边也改成这个number,好,这边也改成number 8万个数据,当然假定是数数判断从这个I到这个位置去,如果number磨上它等于它OK,那么现在呢,就是就算是是一个啊,就是就是一个。
09:02
好,这就统计到是一个嘛,是一个好,那么这个是时候经过他一番这个负循环呢,这个数据就出来了,我们把它把这个结果打印出来一下。在这前面。前面最前面我们把这个时间拿过来。哎,刚才我们已经有这这段代码了。哎,这是我们的一个起始时间。把它放在这,这是我们准备要开始做了,整个for循环结束以后呢,有个N的时间,对有N的时间,然后把它的耗时这段代码呢也拉过来。一共花了多少时间看一下我们?没有使用啊,我们没有使用携程普通的方法呢,我们是耗时多少对普通。普通的方法。普通的方法呢,耗时时间因就是也是N的去减去四大就可以了,这样我也没有往管道里面放了啊,不用往管道里面放,一共是8万,我们来跑一下。
10:00
保存看代码。呃,看看有没有问题啊,Flag没有定义,那就这样子简单一点就直接对吧,给他听一下。好,其其他没问题了吧,好,For ma包包没有引进去,非常简单。好,这时我们一去看看一下啊,现在我估算呢,根据我们这个这个理论上说,它应该是至少不能低于八秒,因为原先是两秒,你这个应该是大于等于八秒,看效果对不对,好同学们我先推到上一节。然后呢,刚才哦不不是推到上一级啊,写错了go。勾这里面呢,有一个刚才写的太的这个文件夹,好这六这个怎么变成黄色了。现在现在对了吗?好对了啊,来T,然后我们go run,我们的test顶勾跑一下。
11:04
应该是八秒搞定。呀,比八秒还还多呀,呃,十秒,但是还还是这个范围以内啊,还是范围有的,我们原先这个呢,一共花了两秒钟,这个呢,咱一共花了十秒钟,那应该就是我说应该是大于等于这个,呃八秒啊可能会大一点,但是绝对不会小,那有一个问题我要分析一下,就说我现在一共是四克CPU,那如果你像比较彪悍的,像服务器对吧,人家16克32克CPU,那很强的,那也就说它的知道从性能上,从运算性能上,我们可以感受到用携程它确确是好。对吧,这个大家就以后呢,就说我想提高一个速度,诶啊我们可以考用携程好了,老师呢,就先给大家分析到这里,这是我们的一个关于它的一个说明,好,那现在呢,我们接着往下看各位同学。这个课堂练习要求你们自己去做,晚上呢,呃,在老师讲的这个基础上再去做,我相信同学们呢,应该多少有点失误了,不至于像诶,不至于说像那个昨天布置的时候呢,大家一点失都没有,现在七八个怎么怎么做失误啊,好,这样呢,我还是要求同学们都要去做啊,都去做一下,你只有去做,你只有去做这个东西,你才能发现问题,你才能把这个东西理解的更透彻,就老师讲再多的遍没有用,就老师讲完了过后呢,其实都是老师对这个东西的一个认识,就说我讲的这些东西,书上也没有,网上也没有,就是自己对这个程序的一个理解,包括我们比如说我们以前在讲Java,讲C的时候,学C的时候,我们认为他是这样子做的,就有些同学有些东西呢,你要说这玩意,你你哪知道底层对吧,那么我认为这个底层它就是这样子的。
12:52
只要他能够把这个讲得通,我们就认为这个理解是没问题的啊,所以说你在你在做开发的时候,你要说每天都要去看源代码,这这个也不太现实,就有些东西它大同小异,基本上都是思路。
13:06
因为这个设计者他本身就是做C开发的,所以他的思路呢,应该是大同小异的,对吧?诶所以说这个呢,大家要要去多做啊,多做才能理解。啊,才能理解。所以你放心就说你只要去多做了,你一定会去理解好一一定会把它学到手的,好这个呢,我们就跳过到这里,接着呢,还有几个细节给同学们再聊一聊,来打开我们的这个地方,这个刚才有个结论说一下啊,一个小小的结论就是使用结论,就是使用什么呢?使用这个构斜成后,构斜成后。学成后效率啊,学成后我们的执行速度,执行的这个速度比啊,比普通的方法,比普通方法提高了,提高了至少十倍。至少十倍。那么呃,这个呢,还跟你的这个CPU有关系啊,十倍。
14:02
说老师,我说老师那那这样子行不行呢?说老师那你刚才做一个做一个做一个实验,你刚才在这个地方不是取的是呃四吗,咋要起八个呢。我还没试过,你们觉得起八个八个这个携程的话,呃,它的速度会不会比那个两秒还快呢。我说我没试过,可以试一下啊,我刚刚也有点兴趣,因为我以前就是按四个,因为我是个CPU嘛,我前是个CPU啊。那要改的话,改哪几个地方,同学们,呃,首先这个是不是要改一把呀,这这个要改一把对不对?呃,还有哪个地方改一下,是不是这个要改一下呀,要起八个嘛,八个学生。还有哪地方需要改一下,是不是这样还要改一下,那那还要改吗。啊,不需要改了是吧。还有没有修改的看清楚啊,别别别跑错。不知道啊。我我认为啊,同学们,我认为应该速度不会有明显提升。
15:02
因为因为刚才我们这个任务已经作用在四个CPU了,CPU它已经是定型了,你你你也没用了啊,但是有可能会提高一点点啊,但是绝对不像你说的,你原先是两秒,你改成八个,它就一下提高提高了,这个比如说是八除以二变成一秒了,我觉得不应该这样子。我看看一下吧。CD一下,我们直接这有一个DR go run。命点勾是这个吧,跑一下。搞一下。还变慢了是吗?三秒变慢了没用,就是你们也不要祈求着这个携程开多了,你就一定会按这个倍数增加。两秒没用,为什么这么讲呢?就是说因为你你开你开八个,它也是作用在四颗CPU上。就是他没有用。
16:01
就你不能说我开开多少个携程,你的速度就上去了,那还了得,如果真的这样的话,我们硬件就不用升级了。那你直接把Cpu管,把这个携程多开几个速度被上去了吗?因为你刚才四颗它CPU已经全跑了,所以你如果说有兴趣的话,你可以用这个任务管理器,你直接的时候,你可以看到任务管理器应该这个CPU应该是蹭的一下就上去了,如果他能够把CPU全部利用起来,就说明我们这个程序已经很好了,我试试看。就你看现在我的CPU现在还处于有这个有这个空闲的状态,因为我的负载是在三四十九左右,你看我跑的时候应该会高一点啊高一点。看一下。你看是不是不是上去了呀,哎,你看100%了就很牛逼了,已经,因为他把你的CPU已经。达到一个极限了,你你再去跑刚才那个各位同学,你再你再去搞去跑刚才那个代码。我们刚才我们刚才不是写了一段代码吗?GOCD到test这里面去,各位同学这边不是也写了一个test这里够吗?你看这个时候CPU它的利用率应该不会飙到100%。
17:11
你看他,他标不上去。也还可以,但但标不上去了,你看标不上去。你本身就占了21,你看他下来了,你看到没有。你看它标不上去。啊,这在省了点时间啊啊,标不上去。所以这个东西大家要要去理解,所以说他已经已经很厉害了,好,同学们好,那这个呢,至少四倍好,接着往下看细节。好,先去看视频。
我来说两句