欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Netty之模型分析

程序员文章站 2022-05-04 21:19:43
...

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线程立即返回。 Netty之模型分析
            
    
    博客分类: Netty netttyreactor

 

2.线程模型

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


Netty之模型分析
            
    
    博客分类: Netty netttyreactor
 

3.异步事件驱动模型

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


Netty之模型分析
            
    
    博客分类: Netty netttyreactor
 

  • Netty之模型分析
            
    
    博客分类: Netty netttyreactor
  • 大小: 26.8 KB
  • Netty之模型分析
            
    
    博客分类: Netty netttyreactor
  • 大小: 90 KB
  • Netty之模型分析
            
    
    博客分类: Netty netttyreactor
  • 大小: 24.5 KB
  • Netty之模型分析
            
    
    博客分类: Netty netttyreactor
  • 大小: 159.6 KB
相关标签: nettty reactor