00:00
我们再来看第二一种向任务队列里面提交任务的方式,叫用户自定义定时任务。给大家做一个演示。用用户制定定时任务呢,跟我们前面的这种呃,普通的提交方式其实区别并不大,只是呢,他这里用的是那个schedule的一个方法来进行提交的,我们来看一下,呃,还有一点要说明一下啊,这种任务提交到该任务。该任务是提交到哪里呢?不再是这里了,不再是我们这一个task q,而是这个队,这个队列叫schedule。Schedule。KI。Schedule task q,也就是说它是放在另外一个队列里面的,明白我的意思吧,这个大家要要清晰一下啊,OK,别搞错了啊,就它是两个呃,不同的队列,那现在呢,我们呢,还是来给大家做一个演示。
01:03
来CXTCTx.channel拿到了,然后呢的loop拿到了点schedule,同学们看这个schedule里面呢,会突三个参数进去,第一个就是时间,LA接口的一个对象,也实际上就是你的任务,然后now呢,就是延时多少时间去执行我们这个任务,后面呢,指定时间单位,非常简单,那为了省事,我就直接从我们这边写好的一个拿过来,好吧。让label我就不费时间了,直接复制过来,复制过来呢,为了以示区别,这边输一个标示。后面我们指定延时时间,比如说五秒啊,比如说五秒。然后呢?时间单位,Time。Second。代码写完好,这就是我们这一个叫做把任务提交到schedule task q里面去,好为了看到这个效果呢,我们仍然是来给大家运行一下,同学们观察一下啊观察一下。
02:00
我在这儿先运行着哈。跑起来看看,就是这个任务有没有得到执行先。Ninety server准备好了,然后。我们先来看它返回的时间,返回的数据。喵一返回,当然喵一肯定要返回了,因为它本身都没阻塞,说明你这边提交并不会影响到我们这个,呃,这个代码去不会阻塞在这里,喵二喵喵一喵二喵三好喵四了该。下个就是藐视。诶,标识也出来了,看到没有说顺序完全是一样的,首先第一个把我们这个返回,紧接着返回我们提交的第一个任务时间,第一个任务你看我把时间改了一下啊,这边是喵二这边是。喵山这边是。藐视执行的顺序也是一样子的。那这就是呢,我们要来验证一下,就是当我们把任务呃,用这个schedule方式去提交的话呢,它是不是放在这个schedule task q里面去的,而不再是task q,我们来看一下,同样方法很简单,我们下一个断点。
03:05
把这边呢。关闭一下。我们debug。朋友们debug下。跑起来。好的,然后呢,我们run client。点错了,让这个。我们的代码会卡在这里了,那么我们快速来看一下。这里ctx。往下看,走起来,里面有个pipe烂pipeline有一有一个channel。对,Channel channel下面呢,我们找到这一个event loop,好,我们往下看它的任务队列,大家可以看到task q呢,有两个没问题吧,这是我们提交的原先已经做过的两个普通的那用户任务还有一个。往下看。哎,同学们看这里schedule task q是不是有一个一啊,这就是我们提交的。
04:01
就是那个任务,其实这个任务里面呢,还可以得到很多信息的,你看。还可以得到很多很多信息啊,还有很多信息,比如他的他的这个执行器啊,有没有监听啊等等,都还可以拿到的。好,我们后面这个在使用的过程中呢,再去说它的一些用法,好至少呢,我们学了第二种方式就是呃制定,呃就就是说我们定时提交一些任务。接着来看第三种非当前reactor线程调用China的各种方法,这什么意思呢?就是说我们有时候是存在这样一个问题的。什么意思,就是说我我这边有一个管道,这边又有一个管道,对啊,这边还有一个管道。那现在假如我们有个推送任务,就是这是A。Just be。这是C,对,实际上呢,我们要可能要推送一些推送一些信息,我要我要从这个A呢,对,我比如说我是服务器吧,或者是服务器啊。
05:00
假设我这边是的是是服务器,我要把一些信息呢,异步的推送到ABC。那你要推送到,其实也是按照这种异步的方式,我们是不是也要推送到他的任务队列里面去啊,那大家想,如果你要做这件事情,你最关键的地方是不是就是要拿到各个的channel,为什么要拿到channel呢?因为同学们看到我们只要得到了对方的channel,每就是每每一个客户的channel,我们就可以拿到他的对应的loop,然后呢,就可以把任务推推送给他,是这样子吧,同学们。所以说这里面呢,我这里写的很清楚,就是如果推送业务,根据用户的标识,我们可以拿到这个China的引用,然后用相相应的right方法写过去进行异步消费,那关键就是说你怎么维护一个圈的引用,一个比较简单的方法,可以这么做。我这里提示大家一个思路啊。其实做起来也并不难,怎么了?在这里大家有没有发现,当我们这,呃,就是这个server启动的时候,你有一个channel建立的时候,这有个in channel,这边会拿到so channel。
06:07
对吧。拿到这个shock channel,所以说你你这个地方呢,其实是每一个用户来了过后,这个channel都可以拿到这里我们来看一下。客户对应的签了啊客户。我们写shocked。Channel。那么这个地方呢,为了看到它的一个区别,我们把它的哈希code打出来。哈喜。就是说你看到每一个用户来了之后呢,都会有不一样的一个cash code。说明各个客户的China它是不一样的点,还是扣。那你要做的事情就是什么呢?把这个channel放到我根据他的用户标识放到一个集合里面去,不就完事了吗?对不对,那你随时想推送业务,你找到他的圈,把任务给推过去就完事了,就这面你可以把圈放到哪里呢?啊,可以使用。一个集合,集合管理或者管理啊,所有的管理。
07:04
Channel。管理我们China。然后在需要的时候呢,这个channel在在通在需要时。在需要推送任务时推送。推送。消息。消息时对不对,可以将任务将呃将这个消息,将这个业务业务放入到。或者要加入到吧,加入到各个。哥哥吃了。删了。对应的。China China。对应的这个n IO event。Event loop。的什么呢,Task?他是个Q。他是个Q。或者或者什么呢?或者你如果有个定时任务吧,是吧,Schedule。
08:03
Schedule,这个schedule。De,啊,然后呢?好,这样子。那现在我们看看是不是每一次拿到的,每一个客户来了过后这一个圈了,它是不一样的,对吧,你用一个集合管理就行,那我们试一下,其实这点不用试,大家都应该很清楚的知道了,只是让老师再给大家呃验证一下啊验证一下这观点走跑起来。运行了。运起来过后呢,我们再来。启动多个客户端。这第一个。好,第一个拿到,第一个拿到过呢,我们看到它的这个channel的哈,Code是这么玩意儿。好,我们再来一个。在运行。对不对,呃,在运行过后呢,我们发现对不对,China呢哈,Code就变了。哈希扣的就变了,如果对于同一个用户,对于同一个用户来呢,他们各自用自己的这个这个。
09:05
管道order channel就行了。看再来一个是不是又变了呀。你看这又变了一个是不是。好的,那基于这样一个原因,下面这个大家知道怎么做了吧。其实没有什么太大区别。没有什么太大区别,你要做的时候呢,就把这个呃,这个China里面拿出来拖这个China拿到他even loop,然后把任务提交SQ的提交给他的,它是个Q或者是schedule,它是个Q就完事了,好同学们,那关于嗯,就是这一点啊,就是第是这个用户自定义历史任务和。呃,非当前reactor线程调用圈的各种方法来推动消息呢,我们就说到这,最后再做一个小小的呃方案的再说明关于ni。啊,Ni,呃,模型我们说完了之后再做一个说明啊呃,Ni呢,它其实本质就是抽现了两个线程组,一个是boss group,专门接收客户端的接收,呃,专门处理客户端的连接,Work group呢,专门处理网络的读写,没问题吧。
10:06
还有就是刚才我们说到一个非常重要的IO event lo表示一个不断循环执行处理,呃,不断循环执行处理任务的线程,对不对?每个event都有一个select,用于绑定监听在其上的so。呃,这个网络通道是吧,同时呢,大家还记不记得,就是他还有一个消息队列。还有一个消息,队列。那么IO event loop采用什么?采用串行化的设计,把这个消息的读取、解码、处理、编码、发送,始终都有这个IO的,对这个现成的event,呃,IO event lo来负责,所以说如果说你这地方有长期的这种业务处理的话呢,也有可能导致我们这个事件会阻塞。那你要要用相应的异步的方式来处理,最后在整理几整理几年I event loop group下面有多个IO event lo这不说了,然后呢,I的loop包含一个sector,一个task q。
11:07
对,每个每个n IO event loop的select可以监听出的多个IO channel啊,没问题吧,就是我们一个IO event lo,它这个select可监听多个channel,每个no channel呢,只会绑定唯一的一个IO event loop,就说这个呢,它绑定到一个image loop上面去,而每个n IO image China都绑定有一个自己的China pan,也就是说呃,你可以你你可以这样理解哈,就是说我们这有一个loop就是。Even the loop。然后呢,这个问的loop呢,可以有多个China。对,有多个圈呢。跟他呃,跟他关联,然后呢,每一个这个n channel里面呢,它有一个管道。就是这个channel派,而且这个channel PI呢和channel其实他们相是相互包含的。
12:03
也就是说我们可以通过China呢拿到对应的paperline,也可以通过这个paperline呢,拿到这个channel,好就这样一个意思,好,同学们关于这个方案的再说明,我们就聊到这里。
我来说两句