Netty第二章 2020 3-2——Netty源码之Server端Boss线程组的启动

以主从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 和 SingleThreadEventExecutor.runAllTasks。

下面先说下SingleThreadEventExecutor.runAllTasks。

3) Boss线程组创建并启动的线程数量

无论你在构造EventLoopGroup的时候的入参传入的nThreads是多少,真正创建并启动的Boss线程的个数只和bind的端口数有关。如果server只绑定了一个端口(大部分服务器都是只绑定一个端口),那么及时nThreads>1,那么也只会启动一个Boss线程。

因为这个线程的启动是bind动作的附属操作(bind中的register0),所以和bind的次数相关。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值