Netty线程模型(图解秒懂)

Netty是基于异步的事件驱动的网络框架和工具,常见的分布式中间件底层都有涉及到Netty。
Netty基本组件:Channel、Bootstrap 、EventLoop、ChannelPipeline、ChannelHandler、Future
Netty的线程模型为三种:单Reactor单线程,单Reactor多线程、主从Reactor多线程

Reactor的作用相当于一个分发器,可以分发连接请求和处理IO请求;相当于一个饭店的服务员,是可以异步非阻塞地进行工作

这里的线程一般指的是处理IO请求的线程数,而接受和发送请求通常为1个线程;

  1. 单Reactor单线程
    Netty线程模型(图解秒懂)_第1张图片
    具体说明:
    1)Select 是前面 I/O 复用模型介绍的标准网络编程 API,可以实现应用程序通过一个阻塞对象监听多路连接请求
    2)Reactor 对象通过 Select 监控客户端请求事件,收到事件后通过 Dispatch 进行分发
    3)如果是建立连接请求事件,则由 Acceptor 通过 Accept 处理连接请求,然后创建一个 Handler 对象处理连接完成后的后续业务处理
    4)如果不是建立连接事件,则 Reactor 会分发调用连接对应的 Handler 来响应
    5)Handler 会完成 Read→业务处理→Send 的完整业务流程

  2. 单Reactor多线程
    Netty线程模型(图解秒懂)_第2张图片
    具体说明:
    1)Reactor 对象通过select 监控客户端请求事件, 收到事件后,通过dispatch进行分发
    2)如果建立连接请求, 则右Acceptor 通过accept 处理连接请求, 然后创建一个Handler对象处理完成连接后的各种事件
    3)如果不是连接请求,则由reactor分发调用连接对应的handler 来处理
    4)handler 只负责响应事件,不做具体的业务处理, 通过read 读取数据后,会分发给后面的worker线程池的某个线程处理业务
    5)worker 线程池会分配独立线程完成真正的业务,并将结果返回给handler
    6)handler收到响应后,通过send 将结果返回给client

  3. 主从Reactor多线程
    Netty线程模型(图解秒懂)_第3张图片
    具体说明:
    1)Reactor主线程 MainReactor 对象通过select 监听连接事件, 收到事件后,通过Acceptor 处理连接事件
    2)当 Acceptor 处理连接事件后,MainReactor 将连接分配给SubReactor
    3)subreactor 将连接加入到连接队列进行监听,并创建handler进行各种事件处理
    4)当有新事件发生时, subreactor 就会调用对应的handler处理
    5)handler 通过read 读取数据,分发给后面的worker 线程处理
    6)worker 线程池分配独立的worker 线程进行业务处理,并返回结果
    7)handler 收到响应的结果后,再通过send 将结果返回给client
    8)Reactor 主线程可以对应多个Reactor 子线程, 即MainRecator 可以关联多个SubReactor

你可能感兴趣的:(java,后端,面试,网络,中间件,多线程,netty,java)