线程模型
dubbo基于netty。有5种派发策略:
- 默认是all:所有消息都派发到线程池,包括请求,响应,连接事件,断开事件,心跳等。 即worker线程接收到事件后,将该事件提交到业务线程池中,自己再去处理其他事
- direct:worker线程接收到事件后,由worker执行到底。
- message:只有请求响应消息派发到线程池,其它连接断开事件,心跳等消息,直接在 IO线程上执行
- execution:只请求消息派发到线程池,不含响应(客户端线程池),响应和其它连接断开事件,心跳等消息,直接在 IO 线程上执行
- connection:在 IO 线程上,将连接断开事件放入队列,有序逐个执行,其它消息派发到线程池
业务线程池:
- fixed:固定大小线程池,启动时建立线程,不关闭,一直持有。(缺省)
- coresize:200
- maxsize:200
- 队列:SynchronousQueue
- 回绝策略:AbortPolicyWithReport - 打印线程信息jstack,之后抛出异常
- cached:缓存线程池,空闲一分钟自动删除,需要时重建。
- limited:可伸缩线程池,但池中的线程数只会增长不会收缩。只增长不收缩的目的是为了避免收缩时突然来了大流量引起的性能问题。
两种线程池:
- io线程池:netty的boss和worker线程池
- boss:建立connection
- worker:处理注册在其身上的连接connection上的各种io事件
业务线程池:
- ThreadPool():“DubboServerHandler-10.10.10.11:20880”
与worker配合处理各种请求

- 客户端的主线程发出一个请求后获得future,在执行get时进行阻塞等待;
- 服务端使用worker线程(netty通信模型)接收到请求后,将请求提交到server线程池中进行处理
- server线程处理完成之后,将相应结果返回给客户端的worker线程池(netty通信模型),最后,worker线程将响应结果提交到client线程池进行处理
- client线程将响应结果填充到future中,然后唤醒等待的主线程,主线程获取结果,返回给客户端
立志如山 静心求实
浙公网安备 33010602011771号