以主从Reactor为例,Server在启动的时候,会创建Boss和Worker两个EventLoopGroup,这两个group会作为参数传入到ServerBootstrap的group方法中。
1.Boss组线程的启动:
1) 用户线程部分:
AbsttractBootstrap.bind->绑定端口
AbsttractBootstrap.initAndRegister->初始化channel并注册channel
MultithreadEventLoopGroup.register
SingleThreadEventLoop.register
AbstractChannel.register
SingleThreadEventExecutor.execute
SingleThreadEventExecutor.startThread->这个只会在初始化的时候start一次,因为inEventLoop是false。
SingleThreadEventExecutor.doStartThread
ThreadPerTaskExecutor.execute->4.1.X新加入的方法,将用工厂创建线程并启动执行任务的动作封装了起来,也是真正启动Boss线程的地方,之前都是用户线程。
2) Boss线程部分:
SingleThreadEventExecutor.this.run
NioEventLoop.run->这里是一个死循环,在ratio不是100的时候,会一直跑任务,主要工作有两个:
NioEventLoop.processSelectedKeys 和