00:00
那么打开我们的幻灯片啊,打开我们幻灯片。OK。打开我们幻灯片,我们来讲下一个内容对不对,下一个内容,下一个内容呢,我们把它叫做这个东西叫做啊,叫做GR和channel,那么呢,就是我们所说的斜程,Channel呢,就是我们说的管道,然后看一下。好,这是我们讲的grting和channel啊,GR就是我们说的携程,那么channel呢,就是我们说的管道,这两个呢,听起来好像感觉很高大上,其实呢,呃,还真的有点高大上啊,就确实确实听起来挺有意思的,那讲起来呢,你会觉得很很很好玩,但是呢,稍微不注意呢,这容易蒙圈,容易蒙圈,所以说老师在讲的时候呢,还是要给他画图分析来看第一个老规矩,还是他们的需求,对吧,我以一个需求带动大家思考,诶大家就觉得很很很很好玩的来看第一个题。来,呃,首先呢,我们先看一个需求,引出我们这个grting啊,GR就是携程的意思,那么需求要求统计一到2万的数字中哪些是数数啊数数,这是很经典的,好多好多这个讲课呢,都喜欢用这个案例,当然也可以是排序,也可以冒泡,后面我们有很多案例啊,就是说我要求大家统计一到1万到2万的数字中哪些是数数。
01:26
各位。各位,我问大家,如果你没有学,或者说以你现有的这个知识结构,现有的这个知识储备,你怎么去完成?来,班长你说一下。嗯,描述能力啊,一定要要有这个描述能力,大方一点肯定一点,错了就错了呗,不敢说啊,但来我们看这个传统分析是传统的方法,就是使用一个循环,我对一到2万的这个数字进行一个循环,对不对?那么循环的时候呢,我把这个数据取出来过后,我让这个数从哪里呢?从二到N减一进行一个。
02:19
进行一个取模。啊,对它进行一个取模啊,就说用它这个来除嘛,就是用这个N去磨几呢,磨这个二到N减一。二到N减一,如果在这个模的过程中啊,二到N减一,呃,一个一个都没有被整除的,那说明这个N呢就是一个数数,否则就不是一个数数,所以传统思路非常简单,就是用循环来判断。这种传统思思路,同学们应该都可以完成,待会我们也可以写个代码啊,会我我会类似写个代码,但是现在先不着急写。思路已经有了。
03:00
那么同学们想一想啊,这只是2万个数字。那如果说我要求大家。这么多个数字,来,各位朋友想一想,如果我要求你们完成一到这么多个数字的判断,哪些是数数,你想一想,这个时间会不会很长呢?肯定会很长,你你想啊,这个数数它是怎么怎么来确定的,它是要从这个从让他自己去除以二到N减一这个范围,其实量很大的。而且你还是这么大个数字,相当于一个双层复双双层循环,而且还是很大的一个循环。那想一想,这个时间肯定很很很浪费时间的,很耗费时间,那如果说我们用传统方法,我们来试一下,到底花多少时间,待会儿我写代码验证啊,第二这是第一个思路,第二个思求思路呢,就是说我们能不能用并发。加并行的方式,那待会儿我们再说,并发和并行有什么区别啊?你可以简单理解成并发吧,那么我们能不能这样做呢?将统计的数数任务。
04:04
在这个任务我们分配给多个这个这个携程去做,你可以理解成让多个这个这个这个这个。程序去完成啊,我可以把它分解,比如说你你你做一部分,我做一部分,就好像咱有一个任务,我现在要统计这么多到这么多的一个叔叔,我交给一个人去做,比如说交给这个班长,班长肯定觉得很累。说在这个这个台完成不了,如果我把这个任务交给谁去做,交给全中国人去做啊,13亿人口,每个人把它除以13亿份,你统计一下你,诶这个事情就相当简单了一点,对吧,最后把这个结构一汇总完事了,因为我们把这个任务分解下去了。这个就是我们这个group的一个非常经典的作用,它可以干什么呢?它可以做一个并发和并行处理,让我们的多任务,一个很大的任务分解成。到多个工体去完成,诶,这有点像现实生活中,把一个大任务分配给多人去做好,这个就是我们的需求,大家基本上也听懂了,来,我们来看一下这个代码啊,先把这个呢写到我们笔记中,我们先用传统方法来写一下,对,这还有代码啊,这个代码我上节课代码没有整理,我把代码给大家整理一下。
05:19
把这个代码稍微整理一下,各位。把这个代码呢,还是有用的,我把它整理到这里啊,刚才我们写的是monster这个包包啊,Monster下面有个mon这个包包下面有个monster.go monster.go monster.go没问题啊,然后呢,这个代码呢,老师就呃。不去截图了,直接把源码放这儿,还有一个呢,就是测试它的代码,对测试它的代码叫啊,也是这个monster包包下面有一个什么呢,Monster monster。点下划线test的点勾对不对,好这个代码呢,我们也把它板输到笔记里面去,具体来说就这段代码。
06:01
好的,我把它呢给各位朋友放到我们的笔记中去,好,现在呢,我们想讲这个叫做携程和管道,我先给它来一个啊分页符,对分页符我们叫做携程合管道就是GR。啊。和和什么呢,这个channel。传统。先别写错了啊,全好,给他来一个标题,这个是我们的标题一,各位朋友啊,标题一。好,刚才呢,老师已经给大家做了一个GR的一个需求,也就是说我引出了这个他的这个引起大家思考啊,引起大家思考来一个标题二,那具体来说这个需求呢?哎,刚才老师就说了这么一点对吧,非常的简洁。好这样我们啊,我们提出一个需求是这样子的。然后呢,我们分析了分析了一下思路是这样子的,第一个思路就是说用传统方法。
07:02
传统方法这样子呢,就傻乎乎的一个个做。显然传统的方法肯定是。很慢的,很慢。很慢很慢的原因,很慢的原因,因为你把一个任务就当一个CPU去做,你一个CPU你你你我们这个一般电脑上就有四核,八核,16核的多的是,那你其实是一个人去做的话,其实实际上一个CPU在工作,其实挺不划算的。机子怎么,你看我们现在电脑上哪一个哪个电脑不是多核的呀,你看我我这个机机器这么差,我这有四个核,你看这这看这是不是,诶核上哪去了啊出来了,看一个一个CPU2个三个。四个一个四个,那你们现在电脑稍微买的新一点的,一般是八核那一个CPU去干一件事情和让四个CPU去干一个事情,那肯定不是一个一个档次嘛,相对说另外另外三个CPU你没有充分发挥它的威力,对吧,所以说这个肯定不划算。
08:03
好,这个呢很慢,这个呢效果速度很快,速度至少啊,我可以告诉明确告诉他速度至少提快提快四倍提快。提高四倍没问题,所以如果你你你让这个任务呃,分配给四个。倍啊,四倍。你如果把这个把这个任务分配给四个CPU去做,肯定提高四倍,好,这个是需求的,这个讲解就是为什么要有这个GR,那下面呢,我们就来看GR的一些基本介绍,先截。
我来说两句