00:00
在前面讲的这个基础上呢,我们就可以来对第,就是我们第三个模型来做一个详细的说明,大家看。这个图是。是对我们ni模型做了一个详细的解释,那老师呢,还是一步一步给大家说一下啊,呃,还是有点一稍微有点理论化的东西,因为这个理理论的东西完了过后,下一个我们马上就会来做案例,回头再对案例去理解我们这个ni模型,呃,还是那句话,Nike模型是同学们在将来在面试的过程中会经常问到的,第二个呢,你要真正真的理解ni,提这个模型是必须理解的,那同学们来,老师一句一句的跟大家解释一下,首先我们看来。呃,耐呢,他首先抽象,注意听,抽象出两组。就是我们说两组什么呢?线程词。
01:00
县城市。也就是说同学们注意听老师说这句话,在这里呢,其实这个group group,呃,Boss group,它是可以做成一个线程词的,待会我们在第八个代码的时候,你会看到它这个boss group下面呢,有很多子线程,不要着急,一会会让你们看的清清楚楚,明明白白的,那么每一个这个呃线程池,这个线程池里面呢,就会有有这样的叫做n IO event。的一个线程,注意他这个图呢,画的有一点点不是特别的,呃,准确,其实呃,如果准确的说呢,这个boss group它的类型,这个boss group的类型呢,其实叫做ni IO event group group,而它下面的每一个子线程呢,其实是IO event group。说这个地方其实如果要画的准确点,这个group要去掉,后面加一个什么呢,Loop。
02:04
猜才是正确的。啊才是正确的,那不着急,我们我们一个讲吧,两组线程词,哪些组呢?一个是boss。Group。这个group呢,他专门注意听,他专门干什么呢,专门负责接收,接收客户端的连接。OK,他只管客户端的连接,能理解我的意思吧,诶客户端的连接还有一个叫worker。就是他们大家看到worker。Worker group。这个worker group呢,它是专门。专门干什么?负责网络的读写?他就负责网络读写,就是说把这个boss group和worker group说完了,第二点我们来说一下boss group。就是大家看到这个boss group还和这个worker worker。
03:00
Group。那么它对应的这个类型啊,它的类型都是什么呢?其实都是叫做一个叫n IO IO event。Event loop group。它是这个类型,待会呢,我们用debug可以看出来boss group这个对象,还有这个worker group这个对象呢,它的类型是n IO event group group,接着继续来看,那这个东西相当于什么呢?我们来看就是同学们看到的,就是待会你们看到像这样一个东西哈,或者是这样一个东西就叫I event group group,它是相当于。它是相当于一个事件。它相当于事件什么呢?循环事件循环组。循环组。所以说它其实里面是包含很多的啊,这个组里面干什么呢?注意听这个组中,这个组中含有含有多个多个事件循环。
04:10
事件循环,而每一个事件循环每一个事件。事件循环其实是什么呢?就叫是这样一个对象,叫n IO event。Event loop,所以说为什么我跟大家讲的就是像这一个线程,其实。准确的说应该写成NIO,你问的loop更合理一点。更合理一点。好,接着我们继续往下分析。往下分析,那么nio这个IO event就大家看到IO event这个loop,就同学们看到这个东西啊。就是这个东西,它是干什么呢?OK,它表示它的含义是表示一个不断循环的,它是表示一个不断循环的执行处理什么呢?处理任务的线程。
05:06
任务的线程,也就是说大家看到这个蓝色的框框就是个线程,就是我们所说的NI的loop,只是这个地方它名称呢,呃,写的有点不是那么准确啊,这个线程每个注意题。里每个。呃,每一个这个IO的loop。Loop干什么呢?都有,注意听这句话都都有一个select,哎,这个select其实就是我们学IOIO的时候那那种s select的对象,它这个用于干什么呢?它用于监听。监听绑定。绑定绑定。呃,绑定在这个socket,就是绑定在哪里呢,绑定在其。其上的socket socket网络通讯。因为呃,大家刚才呃是不是老师已经讲过,我们将来这个select呢,里面有很多的这个呃通道,呃绑架其实是通道,其实就是so,其实就是一个so连接,呃包括这个也是一样的,因为你这呃接收到一个except过后呢,它会生成一个channel,这个channel其实就是socket嘛,他把这个socket注册到一个S上面去,那么这个select就会监听socket上的网络通讯。
06:27
记得继续往下来梳理,第五点就是要知道是就是我们这一个刚才看到这个东西。就是IO event group group,它是可以有,可以有多个,可以有多个线程的。啊,也也也就是说我们这个NIO问的loop呢,可以含有多个NIO的loop啊,及及可以含有含有多个什么呀这样的东西。呃,就好像这个worker group,这个worker group是不是就包含了两个NIO的lo呀,再说一遍,这个地方准确的是准确的说是IO event的lo比较合理,而不是IO event group,好,我我这说清楚了啊,接着我们继续往下看,嗯,那么问题来了,就是我们我们这一个N就是叫做。
07:27
呃,那么这个NIO里面的loop,它含有几多少个NIO里面的lo loop呢?其实是可以指定的哈,可以指定的好。我们接着往下看,下一个,每个。我们要说每个boss。就是boss event loop。我们看看这个地方应该就是每一个bos。Boss下面的这个东西,这个东西就是一个n IO event对吧,它执行执行的这个步骤,它执行的步骤有三步。
08:03
有三步,我给大家梳理一下,哪三步呢?第一步,第一步首先呢,它是在这地方进行一个轮询,就是轮,它它应该是叫做轮轮巡。轮询。他允许什么呢?轮询accept事件。就是他这个地方只管一件事情,同学们看我们这个图是不是说的很清楚?就是这个boss下面对应的n IO event loop,它就呃轮询这个accept的事件,它是轮询这个事件,如果呃,如果就是,然后轮询到了之后就处理scd这个事件。啊,推进这个世界,然后呢,与什么呢,与client,与这个client建立连接。建立。建立什么呢?建立一个连接啊,这个连接就建好了,它跟这个cloud建立连接好的,呃,生成了一个什么呢?同学们,它会生成一个叫NIO,刚才我已经讲过,这个在简单版说过的叫n IO socket socket channel。
09:15
他会再给我们生成这么一个,呃,NIO烧及这个。然后他把这个什么呢?并并将其将注册到注册到某个某个worker。就是我们这个worker IO event。Event loop。上。的什么呢?Select啊,这个有点绕,也就是说你还是看这个图。嗯,当我这边发现有一个柯过后来过后是个except事件,我会嗯把这个except拿到的socket China呢,嗯嗯,封装成一个叫做nio event ni n nio s,并把这个呢注册到我们这个worker group下面的某一个n nio event,这个还是那一句话啊,是个loop。
10:10
Loop。呃,就是把它注册到work某个worker n IO event loop上的select去,他可能是注册到这个的,也有可能是注自带这个s select select的,根据他的一个算法。根据他的一个算法,好,紧接着我们看第三步,第三步第三步干什么呢。他把这个事情做完以后,以后就是再去处理。处理我们任务队列。的任务。急哪一个呢?急我们的第三步就是急让。Run all tasks。他在这边还可以去执行其他任务,好,这次呢,我们这个boss就是我们这这个boss的每一个。
11:01
No event loop他要干的事情,那现在呢,我们再来看第七个哈,同学们,我们再看第七个,最后一个就是我们是不是应该分析一下worker。Worker group下面的这个叫做n IO event loop,他又做什么事情呢?我们再来说讲每个。Worker。Walker。的什么呢?N IO event。Event loop它循环,他也设不停的循环进行监听嘛,它这个循环事件循环它执行的任务。执行的这个步骤,当然这边也是一个循环的执行啊。循环,循环执行的步骤,他这边我这边每一个IO event event的路,他做的事情又是什么呢?我们也来梳理一下,第一步他是轮询,注意听好,它是轮询什么呢?我们的read或者是read write这个事件。
12:04
你看这里。对于我们worker下面的每一个IO event loop呢?他只关心的是read和write这样的IO事件,对不对?其他事件他不并不关心,然后处理什么呢,IO?IO事件。它处理I事件及什么呢?即RA。他读,他去读读或者是write事件。在什么呢?在这个NIONIO,因因为它这里面会读,读取的时候呢,因因为你已经把刚才生成的n IO shocket China已经注册到上面了,所以说他是在哪读呢?他在这上面去读这个n socket shockcket China。穿着读写。呃,去干什么呢去呃。就是对,应该说是这样写啊,就是对。嗯,应该怎么讲哈,处理IO事件及read的RA事件在哪里呢?在对应的这样写,在对应的NIO上进行进行处理。
13:07
处理。好的,这是他要做的第二步,然后他这个做完了以后呢,他也跟我们刚才那个boss工人盘下去又去做。Run all tasks。同样啊,处理。任务队列的其他的任务又开始进行这样一个循环。这样一个循环,好,同学们。那这个图呢,其实就是一个相对完整一点的ni模型的介绍,对,我这里一共总结了七点。比较偏理论,对不对?好,没关系,理论完了过后,显然呢,下面我们就用实际的代码来对这个理论做一个支持和支撑,这里面其实还有一个东西我没有讲到,就这一块。这一块也是我们ni模型里面非常重要一个东西,叫pipe,烂什么呢?Pipeline翻译过来这个叫什么呢?叫管道。
14:02
这个管道又是什么回事呢?管道跟我们刚才说的这个圈绕就是通道又什么关系呢?他们之间有千丝万缕的关系,所以说我说lighting模型还是很麻烦的,我也可以简单的说一下管道和这个我们这得到的通道有什么关系,你可以简单的认为我们这个pipeline pipeline包含了这个channel,也就是说我们可以通过pipeline去获取到这一个管管道。然后再进行操作真正数据,真正数据的读写操作呢,呃呃,那个传送其实还是在这个呃这个通道里面进行的,而这个管道之所以称之为管道,是因为这个管道里面呢,又可以呃包含很多的这个处理器。所以这里面它会形成一个处理器的一个机制,比如说拦截机制,还有过滤机制都可以在这里进行发生,所以这里面呢,还是我们讲解的一个重点,好同学们,那我这再加最后一句哈,再加最后一句。
15:05
嗯,第八句。第八句。就是我们每一个,呃,Worker的这个n IO event呢,他最终在处理数据的时候,是要通过一个pipeline来执行的,就是每个。每个worker I的loop。啊,在处理数据时,处理业务的时候吧,处理业务时会使用到,使用到这个叫做pipe net。Pipe烂pipeline呢,翻译成我们中文叫最好叫管道,给它分别一下,这个叫通道,这个叫管道,嗯,那么可以简单说一下,这个管道就是我们pipeline。Pion。中啊,包含了。包含,包含了什么呢?Channel,换言之,你也可以这样理解,就是说即通过,即通过什么呢?Pipeline。Pipe pipe可以获取到。
16:03
可以获取到对应的管道,对应呃对应的通道通道好的还有一点,我们这一个pipeline呢,会。有很多的。这个处理器handler,这个处理器呢,它可以对我们数据进行一系列的处理,这个处理器呢,我们net,呃,有内置的处理器,也有一些是我们自己开发的处理器,然后呢,进行相关的这个拦截,或者是相关的过滤啊这样子的还有一个管道,我们说的管道。管道中维护维护了很多的什么呀,处理器。处理器,OK,这个处理器呢,就嗯,可以用这个处理器来进行各种数据的处理,好同学们,那关于ni的模型,老师就讲这些有点偏理论哈,大家稍微的呃理解一下,然后呢,后面呢,我们就开始做案例了。
我来说两句