Dubbo 线程模型

两种线程

  • IO线程:配置在netty连接点的用于处理网络数据的线程,主要处理编解码等直接与网络数据打交道的事件。
  • 业务线程:用于处理具体业务逻辑的线程,可以理解为自己在provider上写的代码所执行的线程环境。

Dubbo 默认采用的是长连接的方式,即默认情况下一个consumer和一个provider之间只会建立一条链接,这种情况下:
IO线程的工作就是编码和解码数据,监听具体的数据请求,直接通过Channel发布数据等等;
业务线程就是处理IO线程处理之后的数据,业务线程并不知道任何跟网络相关的内容,只是纯粹的处理业务逻辑,在业务处理逻辑的时候往往存在复杂的逻辑,所以业务线程池的配置往往都要比IO线程池的配置大很多。

IO线程部分,Netty服务提供方NettyServer又使用了两级线程池,master主要用来接受客户端的连接请求,并把接受的请求分发给worker来处理。整个过程如下图:
在这里插入图片描述

IO线程的派发策略

  • all(默认):所有消息都派发到线程池,包括请求,响应,连接事件,断开事件,心跳等。即worker线程接收到事件后,将该事件提交到业务线程池中,自己再去处理其他IO事件。
  • direct:worker 线程接收到事件后,由 worker (IO线程)执行到底。
  • message:只有请求响应消息派发到线程池,其它连接断开事件,心跳等消息,直接在IO线程上执行。
  • execution:只有请求消息派发到线程池,不含响应(客户端线程池),响应和其它连接断开事件,心跳等消息,直接在IO线程上执行。
  • connection:在IO线程上,将连接断开事件放入队列,有序逐个执行,其它消息派发到线程池。

业务线程池设置

  • fixed:固定大小线程池,启动时建立线程,不关闭,一直持有。(缺省)
    coresize:200
    maxsize:200
    队列:SynchronousQueue
    回绝策略:AbortPolicyWithReport-打印线程信息jstack,之后抛出异常
  • cached:缓存线程池,空闲一分钟自动删除,需要时重建。
  • limited:可伸缩线程池,但池中的线程数只会增长不会收缩。只增长不收缩的目的是为了避免收缩时突然来了大流量引起的性能问题。

配置示例:
<dubbo:protocol name="dubbo"dispatcher="a11"threadpool="fixed"threads="100"/>

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值