Dubbo之线程模型(Dispatcher属性、ThreadPool属性)。

事件处理线程说明

  • 若是事件处理的逻辑能迅速完成,而且不会发起新的IO请求,好比只是在内存中记个标识。则直接在IO线程上处理更快,由于减小了线程池调度。
  • 但若是事件处理逻辑较慢,或者须要发起新的IO请求,好比须要查询数据库,则必须派发到线程池,不然IO线程阻塞,将致使不能接收其余请求。
  • 若是用IO线程处理事件,又在事件处理过程当中发起新的IO请求,好比在链接事件中发起登陆请求,会报“可能引起死锁”异常,但不会真死锁。

Dispatcher

  • all

全部消息都派发到线程池,包括请求、响应、链接事件、断开事件、心跳等。数据库

  • direct

全部消息都不派发到线程池,所有在IO线程上直接执行。缓存

  • message

只有请求响应消息派发到线程池,其余链接断开事件、心跳等消息,直接在IO线程上执行。性能

  • execution

只请求消息派发到线程池,不含响应,响应和其余链接断开事件、心跳等消息,直接在IO线程上执行。spa

  • connection

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

ThreadPool

  • fixed

固定大小线程池,启动时创建线程,不关闭,一直持有。(缺省)blog

  • cached

缓存线程池,空闲一分钟自动删除,须要时重建。队列

  • limited

可伸缩线程池,但池中的线程只会增加不会收缩。(为避免收缩时忽然来了大流量引发的性能问题)事件

配置如

  • <dubbo:protocol name="dubbo" dispatcher="all" threadpool="fixed" threads="100" />
相关文章
相关标签/搜索