00:00
好,那接下来我们看一下调度啊,调度的方法,那我们先回退到最外层的那个方法,Speed的外面。诶,就是这个在tu container这里的start,我们之前看的这个,接下来我们要看它啊,来点一下schedule进来之后。我其他先关了吧。啊。你看。速度设置为。每秒钟多少字节对吧?那在这里呢,咱们主要关注几个方法啊,首先第一个need channel number,这个是不是刚才在切分的时候,根据咱们刚才讲的三种方式进行限速啊,对吧?啊,他们之间什么关系咱们也了解了,接下来呢,他又算了一遍什么呢。根据之前SP计算出来的并发数跟任务数,就取一个什么最小值。
01:04
为啥呢?你我我咱们就举个最简单的例子好了啊,大家想一想呃,比如说我点一个第一,随便点一个作业配置文件啊,一个案例,好这里设置的速度。挑设我就指定一个圈了,我指定为10万。但是我切分的任务只有一个。只有一个task。或者说我就一条数据。但是我配置文件只定了10万有用吗?没用啊,是不是实际只要一个圈就足以啊,对吧?哎,它就是会比较这两个值。谁想用谁,那这样是不是就避免了资源浪费了对吧,那如果你不这么写,就其实也算是一个小小bug对吧?啊,但是他考虑到这是一个小细节啊。那接下来呢,第二一个核心的方法是它sign fairly,公平的什么分配啊,这里就是分配,那这边重点做什么事呢,分组。
02:12
咱们task分完是不是要组成什么一个一个的task group,那就在这里实现啊好,接下来我们就看一下它啊点进来,那我其实你不想看具体的也行啊,你就看这。公平的分配task对到对应的task group中,公平体现在哪里呢?对资源负载作用的load标识进行更均衡的作业分配啊。就是谁。不要不要所有人都均分嘛,就比较忙的少分点,比较闲的都分点,大概就这意思,嗯,那还记得咱们前面课程最开始了解原理的时候,呃,提到一个问题啊,100个task,我的并发是20。
03:10
啊,就全统有20个吧,啊,那请问需要几个task group?还记得怎么算吗?我们说呀,每个task个group默认是五个channel对吧,那你现在有20个并发,那一共需要几个组啊,是不是四个组啊,跟100没关系啊。那这个在哪体现呢?就在这一行,同学们。戴尔是什么?向上取整对吧,向上取整啊,这个无所谓了,来channel number是不是咱们的并发数啊,除以什么。你看名字就行了,都不用去追源码啊,比较清晰,Per task,每个task group的全统数,这个默认是多少呢?是五。
04:01
在默认是五,那这个呢,这个就是咱们。前面讲的那三种方式来指定并发嘛,啊,那一除不就是组数嘛,对吧?啊在这里我们能看到啊。呃,那再往下走呢,它的一个核心逻辑在这儿,Do a。杜尔塞就是进行分组了啊,这边我们不看逻辑,我们看一下注释就好了。到底比呃,比如说我100个task,四个组,我到底该怎么分呢?对吧,怎么分合适呢?对吧,这个也是考验你那个算法设计的好不好,那下面就是一堆设计,其实代码并不长,就这么一点,但是你要去理解它。那我们直接看上面就行,我告诉大家啊,它现在是这样,有三个库,这边应该是写错了,这应该是B啊。啊,其实也无所谓,反正呢,这个库要同步三张表,这个库要同步两张表,这个库同步三张表,那么现在我们假设有四个组。
05:11
那接下来怎么分呢?就这么多个。表我要分到四个组里面去,怎么分啊?那这假设就是一张表一个task,一张表一个task。他是这样,呃,第一个组零号组分零跟四。一号组分三六,二号组分五跟二,三号组分一跟七,为啥呢?能不能找出规律啊?其实规律很简单。同学们。轮询怎么轮呢?来呃,先把四个组摆好,接下来先把每个库的表摆好,接下来干嘛呢?来,我给大家走一遍啊,第一个分给第一个组,好往下走,第二个给第二个组。
06:11
再往下走,第三个库给第三个。现在是没了,一共就三户,那你再回回头回到哪回到一呗,对吧?五走完了,接下来走一,呃,那是不是第四个组还没被分呢,那一就给你呗,再往下走四。啊,这四个组大家都分一个了,是不是又该往第一个组去分了,哎,四给你接下来六。那接下来是分给第二个组,同样道理,二给第三个组,还有一个七给第四个组。能看出来吧,它就实现这么一个效果啊。那具体怎么实现,感兴趣大家去研究研究,或者说有没有更优的写法啊,这个完全都比较灵活啊。这个就是咱们分组数的计算,跟task怎么去组队啊?
07:05
核心逻辑啊,在这儿对应咱们,呃,8.4.1确定组数跟分组,那它的一个调度实现呢,我看一下啊,我截一个视频啊。
我来说两句