00:01
Ni模型,我们前面呢把react模型说完了,现在我们来看一下ni模型,Ni模型相对来说比较复杂,因此呢,我们在讲它工作原理的时候呢,我们分别用简单版,进阶版和详细版来进行一个解释,我们先来看一个关于ni模型的最简单的一个原理示意图,我们来画一下,一边画呢咱们一边分析,好说这里呢,假如有一个boss。Group。我把文字对齐一下。右边,然后文字呢,顶端哈,就boss group boss group里边呢,我们画它的select。对,他会有一个选择器。同样,我们来给它一个不同的颜色,好,这是S选择器。
01:04
Selector。把字体稍微放小一点,嗯。这是select,放大一点吧,这样子干脆。Select OK。那现在呢,我们这边有很多的客户端来连接哈,比如说这有一个client。C。我多画几个。画三个吧。C1 C2 C3,这是三个客户。三个客户端呢,他们会干什么呢,他们会向。他们会向我们的这一个boss group发出连接的请求。注意,我这说的是连接请求。对,当他发出连接请求以后呢,这个sector显然他是可以监听到的,对不对,因为boss group呢,他只去处理什么呀,Accept事件。
02:01
所以这边呢,我们还有一个动作。Accept。那呃,如果这是连接请求,他这个select监听到了以后,他就。呃,调用except获取服务器跟我们客户端的一个连接,得到这个连接以后,他先得到的是什么连接呢?我们来看一下。OK,他先呢,得到的是这样一个叫做server,就是他得到是socket channel。Soed channel。好的,也就是说通过他这个accept,他先拿到一个socket channel,拿到这个socket channel过后呢,没有完,他继续往下走。它会将这个socket channel呢,诶把它干什么呢?把它封装成一个叫ne soccer channel。对,也就是说他先是得到一个so channel,然后呢,把它封装成near channel,封装成near channel过后呢,他这边还有一个叫做worker group的。
03:05
一个线程。Worker group宣布,那么这个work worker group呢?它也有一个select。诶,它也有select,也就是说他会干什么呢?它会将你深层的往这边画一下。在。Net里面呢,它会把这个生成的ne soccer China注册到。我这写个字叫注册。对,注册,他会注册到我们这个worker group上面的一个factor。注意我现在说的是简单版,也就是他是这样子的,也就说我们这个boss group呢,它只是管一个连接,连接完了过后呢,得到一个soccer channel,把这个soccer China呢在干什么呀。这个单词写错了。烧China。对不对,这样写才对。
04:01
Channel,然后他把这个n IO so China呢,呃,注册到这个select去,这个select呢,他也会有一个分发的机制,他会干什么呢?如果说他发现这次是一个关于数据的读取,他也会在这监听,如果关于是数据读取呢,他会干什么呢?OK,他会将这个具体的事物交给一个handler。Handler,好,也就是说他会把我们相应的业务处理交给一个handler。我把这边呢也画一个颜色。这就是我们一个最简单版本的nat模型,这个图说的是它最简单的一个模型,那这个模型呢,我们稍微的梳理一下它的,呃,它的一个流程,还是用文字来梳一下好吧。同样我们在这边呢,为了好看。把这个颜色改一下。改成这样一个颜色。问题那老师呢,现在梳理一下他的一个机制哈,第一点。
05:03
第一点。首先呢,Boss线程就是大家看到boss group。它是一个显然是个线程,它维护了什么呢?线程。他维护一个sector。Select干什么呢?只关注他只会关注。指。只关注什么呢?他只关注这个except事件,对于boss group来说,他只关心except事件,这是第一件事情。第二件事情当。当他接收到。他接收到这个accept过后。Access事件后。他接收到这样一个事件干什么呢?他就会获取到,或者到创建一个就会获取吧,获取到对应的,对应的什么呢?Shocked。Socket channel。
06:02
对,然后进一步封装成,封装成什么呢?封装成ne。Socked。Channel。他把它碰撞成这个,并且注册到什么地方去了,我写了啊,并注册到。注册到。Worker。就是我们这个worker线程。Worker线程,这个worker线程是个什么呢?它实际上是个事件循环。它是个世界循环线程。他在不停的监听世界嘛,循环。OK。注册这个注册到这个worker线程,并由worker线程维护我们这一个ne so channel并进行维护。好的,这是第二点,第三点干什么呢?当我们的worker,就是大家看到这个worker现成,我我说一下啊,就是我们这个work,这个worker group里面呢,它有现成的,它这线程里面呢,会有这个select当worker线程监听。
07:04
他监听到,呃,什么呢,监听到。这个select。Select中的通道,因为为什么这样说呢?因为就是你这个ne,呃,就NIOSO已经被注册到这个sector select监听到,呃,我就是这个worker在监听的时候监听到我们这个select关中注册的。中的通道。通道发生了,发生自己发生了哈,就叫发生,发生感兴趣的,自己感兴趣的。感兴趣的事件后,事件后或者事件事件后他干什么呢?就进行处理,就进行处理,处理的时候呢,就分配给一个handler及就干什么呢,就。
08:01
有。就有handler来完成。Handler,注意这handle,那完成,那么这个handler,这个handler它是怎么来的呢?同学们,这个handler在事先呢,他已经加入到这个通道里面去了,就这个哈德尔事先会加入到这个通道中,注意。主义就是我们这个handler会。是已经加入了,是handler已经加入到,加入到什么呢?加入到通道了。就是这么一个流程,所以说针对这个图呢,我们就做这几点说明,好吧,就这几点说明,这是一个关于ni模型的最简单的。原理示意图,当然这里面还有很多细节,老师呢没有讲到,我们再来看第二张图,第二张图呢,是关于Nike模型的一个进阶版,这里我们又对前面这个图做了一个细化。怎么来看呢?首先同学们看到关于老师刚才讲的boss group,其实呢,它在实际的ni运行中,它也可以是多个线程。
09:14
哎,那么每一个线程它对应的是一个叫做IO event loop,这是一个事件循环,这里面呢,每就说每一个这个NIO的路op呢,它会对应有一个S,这个S干什么呢?它在循环监听IO事件。啊,循环到了过后就处理,处理过后呢,再处理这个任务队列,它就是不停的循环。那呃,这又是一个,那说明我们boss group其实是可以有多个。I event loop。当我们这一个boss group监听到事件以后,监听到连接事件以后呢,创建了socket,他把这一个。封装好的NIO,呃,So China呢,又把它注册到一个叫做worker group上面的,呃某一个select,你当然这个select呢,他肯定事先会进行一个选择,而这个select呢,就是这个工作组这个worker group呢,他你每也也有这个事件循环,这个每一个事件循环呢,里面对应的也是一个线程,大家看这是个这是不是个线程。
10:24
线程,而且呢,它也维护了一个select,这个也在这里不停的监听。好,所以说我们针对刚才这个图呢,做了一个进阶版的说明,那同学们说到这儿说老师,诶,那这个东西很像我们前面讲的主从react模型呢,是不是很像啊,如果说大家仔细去对照的话,其实这个就有点像我们那一个主命那个reactor,这个呢,很像我们的sub reactor,只是这个地方呢,大家可以看到主主的这个就是我们主reactor呢,有多个了。
11:03
是吧,所以这就是他的一个进阶版的说明。那。大家至少要对Nike的一个基本模型有一个了解,那下面呢,有了第一个和第二个。呃,模型的支撑,我们现在就可以来看第三个相对来说比较完整的ni模型了。
我来说两句