Dubbo线程模型2

转自  https://ifeve.com/dubbo-threadmodel/

Dubbo剖析-线程模型

一、前言

Dubbo默认的底层网络通讯是使用Netty来做的,在服务提供方NettyServer使用两级线程池,其中

EventLoopGroup(boss)主要用来接受客户端的链接请求,并把接受的请求分发给EventLoopGroup(worker)来处

理,boss和worker线程组我们称为IO线程。

如果服务提供方的逻辑能迅速完成,并且不会发起新的 IO 请求,则直接在 IO 线程上处理更快,因为这减少了线程池调度。

但如果处理逻辑较慢,或者需要发起新的 IO 请求,比如需要查询数据库,则必须派发到新线程池,否则 IO 线程阻塞,将导致不能接收其它请求。


二、Dubbo提供的线程模型

all 所有消息都派发到线程池,包括请求,响应,连接事件,断开事件,心跳等,模型如下图

direct 所有消息都不派发到线程池,全部在 IO 线程上直接执行,模型如下图

execution 只请求消息派发到线程池,不含响应,响应和其它连接断开事件,心跳等消息,直接在 IO 线程上执行,模型如下图

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

其中ThreadPool的spi实现有如下:

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

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

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

三、总结

dubbo提供了常用的线程模型和线程池扩展各有利弊,如果您有定制化需要,可以按照spi规范进行定制。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 线程是每个应用都必须关系的事情,毕竟任何服务器的资源都是有限的,服务线程过少的容易发生阻塞,服务线程过多的话上下文...
    此鱼不得水阅读 11,221评论 3 7
  •   dubbo线程模型分为IO线程和服务调用处理线程,IO线程主要是netty的线程,可以在protocol标签中...
    mikewt阅读 6,478评论 1 1
  • 最近在进行下单压测的时候发现,当调用下单服务的并发量比较高的时候,大部分都失败了,只有200个下单可以成功(pro...
    我是一棵树丶阅读 13,195评论 0 14
  • 第一章 苏家嫡女 “嗒,嗒,嗒…”门外传来一阵脚步声,随即尖细的嗓音响起:“新后驾到~”紧闭的铁门应声而开,刺眼...
    独唱i阅读 4,101评论 0 7
  • 高质量的友谊总是发生在两个优秀的独立人格之间,它的实质是双方互相由衷的欣赏和尊敬。因此,重要的是使自己真正有价值,...
    Sunny飞镜阅读 793评论 0 0