选择器与I/O多路复用

时间:2023-12-17 08:11:14

Selector选择器是NIO技术中的核心组件,可以将通道注册进选择器中,其主要作用是使用1个线程来对多个通道中的已就绪通道进行选择,然后就可以对选择的通道进行数据处理,属于一对多的关系,也就是使用1个线程来操作多个通道,这种机制在NIO技术中称为“I/O多路复用”。它的优势是可以节约CPU资源,因为只有一个线程,CPU不需要在不同的线程间进行上下文切换。线程的上下文切换是一个很耗时的动作,减少切换对设计高性能服务器具有很重要的意义。

线程数会随着通道的多少而动态地增减以进行适配,在内部其实并不永远是一个线程,多路复用的核心目的就是使用最少的线程操作更多的通道。在JDK的源代码中,创建线程的个数是根据通道的数量来决定的,每注册1023个通道就创建一个新的线程,这些线程执行Windows中的select()方法来监测系统的socket的事件,如果发生事件则通知应用层中的main线程终止足阻塞,继续向下运行,处理事件。可以在CMD中使用jps和jstack来查看创建线程的数量。