dubbo系列--dubbo线程模型

netty线程模型

dubbo系列--dubbo线程模型_第1张图片

在netty中的两种线程:boss线程、work线程

1 boss线程

作用:

  • accept客户端的连接

  • 将接收到的连接注册到一个worker线程上

个数:

通常情况下,服务端每绑定一个端口,开启一个boss线程

2 worker线程

作用:

处理注册在其身上的连接connection上的各种io事件

个数:

默认是:核数+1

注意:

  • 一个worker线程可以注册多个connection

  • 一个connection只能注册在一个worker线程上

dubbo的事件派发策略和线程池

1、dubbo基于netty。有5种派发策略:

  • all:(默认),所有消息都派发到线程池,包括请求,响应,连接事件,断开事件,心跳等。 即worker线程接收到事件后,将该事件提交到业务线程池中,自己再去处理其他事

  • direct:worker线程接收到事件后,由worker执行到底。

  • message:只有请求响应消息派发到线程池,其它连接断开事件,心跳等消息,直接在 IO线程上执行

  • execution:只请求消息派发到线程池,不含响应(客户端线程池),响应和其它连接断开事件,心跳等消息,直接在 IO 线程上执行

  • connection:在 IO 线程上,将连接断开事件放入队列,有序逐个执行,其它消息派发到线程池。

  • dubbo系列--dubbo线程模型_第2张图片

  • dubbo系列--dubbo线程模型_第3张图片

  • dubbo系列--dubbo线程模型_第4张图片

  • dubbo系列--dubbo线程模型_第5张图片

2、业务线程池:

dubbo系列--dubbo线程模型_第6张图片

  • fixed:固定大小线程池,启动时建立线程,不关闭,一直持有。(默认)

    • coresize:200

    • maxsize:200

    • 队列:SynchronousQueue

    • 回绝策略:AbortPolicyWithReport - 打印线程信息jstack,之后抛出异常

  • dubbo系列--dubbo线程模型_第7张图片 

  • 640?wx_fmt=png

  • cached:缓存线程池,空闲一分钟自动删除,需要时重建。

  •  

  • dubbo系列--dubbo线程模型_第8张图片

  • 640?wx_fmt=png

  • limited:可伸缩线程池,但池中的线程数只会增长不会收缩。只增长不收缩的目的是为了避免收缩时突然来了大流量引起的性能问题。

  • dubbo系列--dubbo线程模型_第9张图片

服务端

两种线程池:

  • io线程池:netty的boss和worker线程池。

    • boss:建立connection

    • worker:处理注册在其身上的连接connection上的各种io事件

  • 业务线程池

  • fixedThreadPool():“DubboServerHandler-10.10.10.11:20880”

  • 见“ dubbo的事件派发策略和线程池

    • 与worker配合处理各种请求

 

客户端

两种线程池:

  • io线程池:netty的boss和worker线程池

    • 同上

  • 业务线程池

  • cachedThreadPool:“DubboClientHandler-10.10.10.10:20880”

    • 与worker配合处理各种响应,最后得到响应后唤醒被阻塞的主线程

dubbo线程模型图

dubbo系列--dubbo线程模型_第10张图片

整体步骤:(受限于派发策略,以默认的all为例, 以netty4为例)

dubbo系列--dubbo线程模型_第11张图片

dubbo系列--dubbo线程模型_第12张图片

dubbo系列--dubbo线程模型_第13张图片

dubbo系列--dubbo线程模型_第14张图片

  1. 客户端的主线程发出一个请求后获得future,在执行get时进行阻塞等待;

  2. 服务端使用worker线程(netty通信模型)接收到请求后,将请求提交到server线程池中进行处理

  3. server线程处理完成之后,将相应结果返回给客户端的worker线程池(netty通信模型),最后,worker线程将响应结果提交到client线程池进行处理

  4. client线程将响应结果填充到future中,然后唤醒等待的主线程,主线程获取结果,返回给客户端

注:建议在PC阅读,PC排版比移动端更好

 继续关注,请扫码关注

 回复BAT可获取BAT技术面试视频

        640?wx_fmt=png

你可能感兴趣的:(dubbo系列--dubbo线程模型)