Netty之模型分析

1.网络模型

Netty实现了非常经典的多reactor模型其中mainReactor是对应的Boss类,它负责接收客户端新来的连接。它使用了线程池1,有多个Boss对象供绑定多个地址进行监听,这些地址均匀分配到各个Boss上。默认只使用一个Boss对象监听。

 

subReactor对应Worker类,它负责监听由Boss类accept的socket的读写事件。它使用了另外一个线程池2,有多个Worker类处理这些socket,socket均匀分布在各个worker上。每个worker线程读取消息后,同步调用相应的解码、处理器,待处理完毕后才返回。因此如果业务处理器是非常耗时的非计算密集形操作,如DB操作,worker线程的同步操作严重影响性能。因此这些耗时操作适合放置到线程池3中。

 

ExcutorHandler类是一个异步处理类,它包含一个线程池3,在Worker读取消息后将消息以任务的形式交给ExecutorHandler,它会把这任务加入到线程池中并令worker线程立即返回。 

 

2.线程模型

在第1点中介绍了网络模型,其它包括3个线程池,其中与Worker相对的线程池2称为IO线程,其余线程均为非IO线程。从socket读消息操作自然是在IO线程中执行,在读取消息时可能将消息放入消息处理线程池中执行,或者在TimeIdlerHandler定时器超时执行的操作,这些操作后如果有数据要写入worker中的socket,这时因此执行这些操作的线程并非是IO线程,Netty会将这些操作以任务的形式加入到worker的任务队列并唤醒worker,让IO线程来执行这些write操作。



 

3.异步事件驱动模型

每个Channel有一个Pipeline,Pipeline内有两条由Handler构成的处理链,upstream一般处理读事件,downstream一般处理写事件。downstream末端由ChannelSinkt处理。通过ChannelEvent可以获取ChannelFuture立即返回而不需要等待消息处理完毕,向其添加监听器即可在事件处理完毕后执行相关的操作。



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值