概述
Selector是JAVANIO中能够检测到一到多个NIO通道,并能够知道通道是否为读写时间做好准备。这样,一个单独的线程可以管理多个Channel,从而管理多个网络连接,仅用单个线程来处理多个Channel的好处是,只需要更少的线程来处理通道。事实上,可以只用一个线程处理所有的通道,对于操作系统来说,线程之间上下文切换的开销很大,而且每个线程都要占用系统的一些资源(如内存)。因此,使用的线程越少越好。但是,现在的操作系统和CPU在多任务方表现的越来越好,所以多线程的开销随着时间的推移,变得越来越小了,如果一个CPU有多个内核不使用多任务可能是在浪费CPU的能力。
Selector时候IO多路复用模型的核心组件,它可以监控实现了SelectableChannel接口的通道的就绪情况,基于多路复用IO模型,单线程的JAVA程序能够处理数万个连接,极大提高了系统的并发数。
多路复用IO模型
IO多路复用模型是操作系统提供给应用程序的一种进行IO操作的模型,应用程序通过select/poll系统调用监控多个IO设备,一旦某个或者多个IO设备处于就绪状态(例如可读、可写)则返回,应用程序随后可对就绪的设备进行操作。
IO多路复用模型本质上一个种阻塞的IO,进行读操作的read系统调用是阻塞的,select的时候也是阻塞的,不过IO多路复用模型的优势在于阻塞时可以等待多路IO就绪,然后一并处理,它是单线程的,没有线程的开销,单位时间内能够处理多的连接数。
