Java Netty线程模型分析--多Reactor多线程

目录

1.线程模型:

Netty线程模型的简单原理图:

2.Netty的异步模型:

ChannelFuture的实现类:

工作原理示意图:

Future-Listener机制:

代码示例:

3.核心类:

BootStrap、ServerBootStrap及其实现类:


1.线程模型:

Netty主要基于主从Reactors多线程模型做了一定的改进,其中主从Reactor多线程模型各有多个Reactor。

一共有3种事件,连接、读、写。BossGroup处理连接事件,WorkerGroup处理读、写事件

Netty线程模型的简单原理图:

一个BOSS GROUP里面有多个主Reactor,而Worker Group中有多个从Reactor。一个NIOEventLoop就等于一个Reactor,表示用一个线程(对应一个线程,一个ServerSockerChannel, 一个Selector)去处理客户端连接事件,用Selector,监听绑定在其上的socker网络连接。BOSS GROUP中的Reactor负责处理客户端连接,WorkGroup中的Reactor主要负责处理READ事件。

放个清晰点儿的图:

在这里插入图片描述

Netty线程模型的详细原理图:

1.在WorkGroup中的某个Reactor(NioEventLoop,是下图中NioEventLoopGroup中的一个) 通过selector获取到发生事件的SocketChannel后,需要通过调用handler进行处理,Netty中对于handler的处理是用了pipeline,一个pipeline里面包括了多个handler, 这里应该是用了职责链模式,对SocketChannel进行处理。

2.一个channel(我理解为SockerChannel)对应一个pipeline,一个NioEventLoop,以及这个pipeline里面的handler职责链。

3.Netty中的connect, read, bind等操作都是异步非阻塞操作。

2.Netty的异步模型:

 

ChannelFuture的实现类:

工作原理示意图:

Pipeline中的handler职责链调用???

下面的描述中,转换出入站数据是指数据在入站和出站的时候的编解码

 在Handler处理中,可以使用callback(Listener???)或者Future实现异步

Future-Listener机制:

可以给Future注册监听器,相当于回调函数callback,等Future调用完成后,可以调用这个callback

下图是Future提供的API

代码示例:

其实客户端和服务端的bootstrap在启动的时候,都是用到了异步机制。看下面服务端的例子:

bootstrap.bind(6668).sync()是异步操作,返回ChannelFuture , 然后给ChannelFuture添加一个Listener(回调函数),

3.核心类:

BootStrap、ServerBootStrap及其实现类:

看看服务端是怎样使用ServerBootStrap的:

Note: 注意handler()与childHandler的区别,一个对应bossGroup,一个对应workerGroup

 

 

 参考文章:

NIO多路复用底层原理(Select、Poll、EPoll)_LuckyWangxs的博客-CSDN博客_nio模型 select

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值