1、Netty抽象出两组线程池,BossGroup专门负责接收客户端的链接,WorkerGroup专门负责网络的读写
2、BossGroup和WorkerGroup类型都是NioEventLooGroup
3、NioEventLoogGroup相当于事件循环组,这个组中含有多个事件循环,每个事件循环是NioEventLoop
NioEventLooGroup顶级集成类是线程池,所以说他就是一个线程池的实现类。
4、NioEventLoopGroup可以有多个线程,即可以含有多个NioEventLoop。
NioEventLoop
NioEventLoop实现了EventLoop接口、EventExecutorGroup接口和ScheduledExecutorService接口,并继承了SingleThreadEventExecutor类,这些接口和类为其添加了丰富的功能特性。SingleThreadEventExecutor表示这是一个单个线程的线程池,而EventLoop则是一个单例的线程池,里面含有一个死循环的线程不断地监听端口、处理端口事件和处理队列事件。每个EventLoop都可以绑定多个Channel,而每个Channel始终只能由一个EventLoop来处理。
5、NioEventLoop表示一个不断循环的执行处理任务的线程,每个NioEventLoop都有一个Selector,用于监听绑定在其上的socket的网络通讯。
6、每个BossNioEventLoop循环执行的步骤有三步
1)轮询accept事件
2)处理accept事件,与client建立链接,生成NioSocketChannel,并将其注册到某个worker NioEventLoop上的Selector
3)处理任务队列的任务,即runAllTasks
7、每个Worker NioEventLoop循环执行步骤
1)轮询read,write事件
2)处理I/O事件,即read/write事件,在对应NioSocketChannel处理
3)处理任务队列的任务,即runAllTasks
8、每个Worker NioEventLoop处理业务时,会使用pipeline(管道),pipeline中包含了channel