00:01
Select选择器,先看一下它的基本介绍。Java的NIO是用非阻塞的IO方式。我们前前面已经说到这个事情了,他可以用一个线程处理多个客户端的连接,那么就会使用到select。其实这个示意图,我们在前面画的这个示意图呢,已经把这个基本的概念说清楚了,对不对,就是我一个呢,可以管理多个连接或者说。呃,多个客户端就这意思。S select他是怎么处理的呢?他是怎么做到这一点管理多个通道的呢?来看这句话,S select能够检测多个注册的通道上是否有事件发生。这句话其实。至少有这么几个信息,第一个信息就是select上面呢,可以注册通道。也就是说,我这个select之所以可以管理你下面的通道,其实是因为你把这个通道注册到了我这个select。
01:05
那怎么注册,那肯定我就用一个用一个组,用一个数组,或者用一个数据结构就可以把你这些通道管理起来,是不是。第二个呢,他说是否有事件发生,那也就是说我这个select。他去工作的时候呢,肯定是在不停的去监测,或者是在获取,或者在轮询,我们哪一个注册的通道有事件发生,至于这个事件是什么?是什么样的事件?我就做什么样的处理。所以说我在这加了一句话,多个参呢,以事件的方式可以注册到同一个session。如果有事件发生,便获取事件,然后对每个事件进行相应处理,这样就可以只用一个单线程去管理多个通道,也就是说可以管理多个连接和请求。那这个示意图,其实这还有一张图,大家看一下就可以了。
02:01
同学们看这里。是不是这样一个图啊,就是一个线程要select select下面管理多个通道,就这样,其实这个图呢,还不如我们前面画的这个图来的更详细。紧接着我们继续来,往下面看。只有。在连接,真正有数据就是在一个连接,或者叫一个通道啊,你也可以认为这个连接就是我们所说的一个通道。因为通道的概念呢,同学们现在已经清楚了,就是只有在连接或者说是通道真正有说有读写事件发生时才进行读写,就大大的减少了系统的开销,并且不必为每个链接创建一个线程。好的。第四一个他这种方式呢,因为没有多线程,那就呃,不需要频繁的在多个线程上进行切换。好的,再看下面这个图,这个图呃,其实我们前面已经也接触了,其实这个图就是我们前面画的图,他转过来嘛。
03:03
是不是这样转转一个方向,是不是一样的道理哈,一样的道理,而且呃,我们原先也已经对这个图做了一个说明,只是呢,呃。这里面我们在对他的特点用几句话总结一下,加深对我们这个select印象,当然有些同学老师你现在讲的太理论了,没关系,后面我们会先理论。在实践或者说在用实际案例来讲,S。我们来看这几点哈,Ni的IO线程,也说这个ni的,它这个线程呢,里面有个叫IO线程,这个线程呢,它其实是ne,就是n IO event的loop。啊,他在这边不停相当于是个事件循环,它是一个事件循环,那么这个事件循环呢,它聚合了select,就是呃,你你可以这样理解,你可以怎样理解呢?你你可以认为我们这个线程。就是我们这个线程,就是一个事件循环的一个线程。
04:02
对,他在这个线程里面呢,聚合了一个select,这样理解就可以了。往下继续看。可以同时处理定处理成千上百个客户端连接,不说了吧,当线程从某个客户端socket通道进行读写的时候,若没有数据可用,如果没有数据可用,该线程可以进行其他任务,也就是说我们这个线程呢,就是你你这有个线程没有必要,他也不会就在这一个。连接这这个地方一直阻塞在这或者等待在这儿,不会的,如果你这没有数据来呢,我可以干别的事情。对,线程通常将非阻塞IO的空闲时间用于在其他通道上执行IO,对,就说你这帮如果如果,如果你这帮有IO阻塞了。你这有IO组说就说你说IO要花取一点时间,那怎么办呢?我就去处理别的事情,我不会在这一直等待,所以说呢,单个线程可以管理多个输入和输出通道,诶也是一个意思。
05:05
由于读写操作都是非阻塞的。其实他这个读写操作之所以可以实现这个非阻塞呢,就是它本身有一个缓冲啊,它底层是用缓冲来实现的,就好像同学们学任何一个缓冲,呃,缓存产品,它之所以可以达到这个非异步啊,嗯,就说不阻塞或者是异步,其实就可就是靠缓冲在这在这做起到关键的作用。那因为这个NIO的读写呢,都是非阻塞的,这样就可以充分提升IO线程的运行效率,由于避免了由于频繁IO阻塞导致线程挂起,对不对,你不是说哎,你这边有数据过来了,我这边没有数据,我就把这个线程挂在这。传统的加yo不就这么干的吗?那现在我不需要了,你在这读取读你的,你该干什么干什么事情,对吧?但是呢,我不,我不会在这方挂起我的线程,我在现在可以干别的事情。好,第五句,一个IO线程可以处理并发N个客户端的连接和读写操作,这从根本上解决了传统同步阻塞IO一个连接一个线程的模型架构,那么我们的架构的性能,还有弹性,弹呃,弹性伸缩能力和可靠性都得到了极大的提升。其实这些话就是我这说的12345,这些话我们在前面已经说过了,只是在这里呢,在。
06:26
再给大家强调一下,就从另外一个角度来谈一下select的作用,好的同学们,同学们,那关于select基本介绍我们就说到这儿,下面呢,我们就就就会准备来说select类相关的方法和它的一些使用,好先理论再实践。
我来说两句