没想到吧!关于Dubbo的『消费端线程池模型』官网也写错了。 (1)

简介: 没想到吧!关于Dubbo的『消费端线程池模型』官网也写错了。 (1)

荒腔走板


大家好,我是 why,欢迎来到我连续周更优质原创文章的第 63 篇。老规矩,先荒腔走板聊聊其他的。


上面这张图片是我前几天整理相册的时候看到的。拍摄于 2016 年 8 月 20日,北京。


那个时候我刚刚去北京没多久,住在公司的提供的宿舍里面。宿舍位于北京二环内的一个叫做东廊下的胡同里。 位置极佳,条件极差。


我刚刚进入宿舍的时候,房间里面只有一张大床、一个矮矮的电视柜、一个不能摇头的风扇。我的房间也没有空调,到处都是灰蒙蒙的,用卫生间都是去楼下的公共卫生间。


有一次北京下暴雨,我才发现窗户那边有一个缺口,雨下的太大,可以顺着那个缺口流下来,把我的鞋都打湿了。


宿舍里面没有冰箱,所以节假日我在宿舍只煮面条或者用电饭煲做干饭,然后就着各种酱吃。记得有一次周五领导请我们吃饭,最后菜点多了,有几个羊蹄动都没动,领导就叫我打包带回家。我带回去,挂在墙上挂钩,准备第二天中午吃。第二天一闻,坏了,也就没有吃。


宿舍里面也没有洗衣机,所以我在超市买了一个巨大的盆子,每周末的时候我会拿出一个下午的时间,边看电视,边手搓衣服,四季如此。


刚刚去北京的前一年,过的真的还是很艰难的。但是宿舍的好处是离公司近,所以我基本上也不怎么在宿舍呆着,工作日在公司学习到很晚,周末也去公司学习。


艰苦的环境更能激发人的斗志。


但是我还是简单的装饰了一下简陋的出租屋,买了贴画和绿植,因为我坚信房子是租来的,但是生活是自己的。


而且每周洗完衣服后我会用洗衣服的水再拖一下地。我的房间很小,摆上一张 1.5 米的大床之后基本上就没有什么空间了,所以我用不上拖把,一张帕子就够了。


我可以蹲在地上,把房间里面的每一块地砖的边边角角都仔仔细细的擦拭一遍,然后跳到床上去,静静的坐着,开始放空自己。


当时并没觉得有什么困难,但是和现在的生活再对比一下,真的是天壤之别。现在回想起,才真真正正的觉得:我曾经也在北京用力的生活过,离开的时候回忆满满,风华正茂。


就像我之前写过的:北漂就像在黑屋子里洗衣服,你不知道洗干净了没有,只能一遍又一遍地去洗。等到离开北京的那一刻,灯光亮了,你发现,如果你认真洗过了,那件衣服光亮如新。让你以后每次穿这件衣服都会想起那段岁月。 所以你呢,有没有在用力的生活?


好了,说回文章。


大佬指点,纠正错误


前段时间一位大佬指出了我之前文章中的一处错误:


image.png


文章是这篇文章《Dubbo 2.7.5在线程模型上的优化》


错误具体是指下面红框框起来的这句话的描述:


image.png


而这段话,我是引用的官方内容。而现在这部分内容已经一字不差的加入到官网中了:


http://dubbo.apache.org/zh-cn/docs/user/demos/consumer-threadpool.html


经过验证后发现确实官网上的描述是有问题的。


image.png


所以本文就主要分享两个问题:


  • Dubbo 协议的设计与解析。


  • 以 Dubbo 2.7.5 版本(因为线程池模型就是在这个版本变更的)为分界线,对比不同版本之间,业务数据返回后,反序列化的操作到底是在独立的 Consumer 端线程池里面进行的还是在 IO 线程里面进行的?


需要说明的是由于本文需要做不同版本之间的对比,所以会涉及到两个 Dubbo 版本,分别是 2.7.4.1 和 2.7.5 。写的时候我都会标注清楚,大家看的时候和自己动手的时候需要注意一下。


另外再提前说明一下,文章有点长:如果你自己看 Dubbo 源码,可以先看整体,忽略细节。把整体摸个遍了之后,再去扣细节,精进源码。本文就属于扣细节,看的似懂非懂没关系,先一键三连,然后收藏起来,你自己学的时候总是会学到这个地方来的,而且本文也不是一个非常难的技术点。


如果你没有学到,只能说明你潜入的深度还是差了一点,也许你差一点就走到这个地方了,然后你想:算了吧,差不多得了。


但是你要知道,越往下,越难懂。而越难懂的,越值钱。


你想想,正在抗住流量的东西,是你写的那几行代码吗?不是的,是你系统里面用到的 Nginx、MQ、Redis、Dubbo、SpringCloud 等等这些中间件。而这些中间件里面,抗住流量的,除了它们的集群功能、容错功能、限流熔断、调用链路的优化等待这些手段之外,还有底层的网络、IO、内存、数据结构、调度算法等等这些东西。

这是值钱的。


可惜这些值钱的,不好讲清楚,要说清楚就是长篇大论。所以我常常说的劝退长文都是说说而已的,你这么爱学习,我怎么会劝退你呢,鼓励你都来不及呢,你说是吧?


再说了,我写的长文,也并没有涉及到这么底层的东西。只是我没有想过敷衍这事,我想把它做好了,尽量把它写清楚了,中间再夹杂着几句“骚话”,所以写着写着就长了。


总之,你要坚信三点:


一:我没有看懂,一定是因为这个博主写的太烂。


二:我没有看懂,理论上大多数人也应该看不懂。


三:我没有看懂,那我自己研究一下得让自己懂。


程序员就应该这样,明明天天写着这么普通的 crud,但是聊起技术来却是那么的迷之自信。


image.png

目录
相关文章
|
4月前
|
编解码 网络协议 API
Netty运行原理问题之Netty的主次Reactor多线程模型工作的问题如何解决
Netty运行原理问题之Netty的主次Reactor多线程模型工作的问题如何解决
|
2月前
|
并行计算 JavaScript 前端开发
单线程模型
【10月更文挑战第15天】
|
2月前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
19 1
|
3月前
|
消息中间件 存储 NoSQL
剖析 Redis List 消息队列的三种消费线程模型
Redis 列表(List)是一种简单的字符串列表,它的底层实现是一个双向链表。 生产环境,很多公司都将 Redis 列表应用于轻量级消息队列 。这篇文章,我们聊聊如何使用 List 命令实现消息队列的功能以及剖析消费者线程模型 。
99 20
剖析 Redis List 消息队列的三种消费线程模型
|
2月前
|
NoSQL Redis 数据库
Redis单线程模型 redis 为什么是单线程?为什么 redis 单线程效率还能那么高,速度还能特别快
本文解释了Redis为什么采用单线程模型,以及为什么Redis单线程模型的效率和速度依然可以非常高,主要原因包括Redis操作主要访问内存、核心操作简单、单线程避免了线程竞争开销,以及使用了IO多路复用机制epoll。
50 0
Redis单线程模型 redis 为什么是单线程?为什么 redis 单线程效率还能那么高,速度还能特别快
|
2月前
|
安全 调度 C#
STA模型、同步上下文和多线程、异步调度
【10月更文挑战第19天】本文介绍了 STA 模型、同步上下文和多线程、异步调度的概念及其优缺点。STA 模型适用于单线程环境,确保资源访问的顺序性;同步上下文和多线程提高了程序的并发性和响应性,但增加了复杂性;异步调度提升了程序的响应性和资源利用率,但也带来了编程复杂性和错误处理的挑战。选择合适的模型需根据具体应用场景和需求进行权衡。
|
2月前
|
消息中间件 NoSQL 关系型数据库
【多线程-从零开始-捌】阻塞队列,消费者生产者模型
【多线程-从零开始-捌】阻塞队列,消费者生产者模型
25 0
|
5月前
|
缓存 编译器 Go
开发与运维线程问题之Go语言的goroutine基于线程模型实现如何解决
开发与运维线程问题之Go语言的goroutine基于线程模型实现如何解决
58 3
|
5月前
|
算法 调度 人工智能
人工智能线程问题之无锁化编程如何解决
人工智能线程问题之无锁化编程如何解决
50 2
|
5月前
|
Java Linux
Java演进问题之1:1线程模型对于I/O密集型任务如何解决
Java演进问题之1:1线程模型对于I/O密集型任务如何解决