在v2版本的MyDisruptor实现多消费者、消费者组间依赖功能后。按照计划,v3版本的MyDisruptor需要支持多线程消费者的功能。
由于这篇文章是一系列博客的一部分,我们需要了解前一篇博客的内容,以便更好地理解这篇博客。
[En]
Since the article is part of a series of blogs, we need to know the content of the previous blog in order to better understand this blog.
- 之前的版本中我们已经实现了单线程消费者串行的消费,但在某些场景下我们需要更快的消费速度,所以disruptor也提供了多线程的消费者机制。
-
多线程消费者对外功能上和单线程消费者基本一样,也是全量的消费从序列0到序列N的完整事件,但内部却是局部并行乱序消费的。在一定的范围内,具体哪个线程消费哪个事件是通过CAS争抢随机获得的。
-
disruptor中多线程消费者的载体是WorkerPool。
- 在V3版本的MyDisruptor中,MyWorkerPool和单线程消费者MyBatchEventProcessor一样,构造函数都是传入三个关键组件:RingBuffer、序列屏障mySequenceBarrier和用户自定义的事件处理器。
- 和单线程消费者不同,多线程消费者允许传入一个用户自定义的事件处理器MyWorkHandler集合。传入的每个MyWorkHandler都会创建一个MyWorkProcessor对象将其封装、包裹起来(下文会展开介绍MyWorkProcessor)。
- 虽然同为用户自定义的消费处理器接口,disruptor中WorkHandler和单线程消费者中传入的EventHandler有些不一样。其消费处理接口只传入了事件对象本身,并没有sequence和endOfBatch参数。
主要原因是因为多线程消费者内部的消费是并行、乱序的,因此sequence序列号意义不大,且endOfBatch也无法准确定义。 - WorkerPool对外提供了一个用于启动消费者的方法start,要求外部传入一个juc下的Executor实现用于启动所有的MyWorkProcessor任务。
```java
/*
* 多线程消费者(仿Disruptor.WorkerPool)
* /
public class MyWorkerPool {
相关文章
架构设计之设计模式总结
在实际的项目开发中,我们经常使用设计模式。设计模式能否正确、合理、灵活地应用到项目中,是判断您开发能力的重要指标之一。一方面,您需要为编程打下坚实的基础,另一方面,需要积累大量的项目经验。这个过程不是...
ftp多文件压缩下载
@GetMapping(value = "/find") public String findfile(String filePath, String fileNames, Htt...
购买新电脑后必做的几件事(操作系统为Windows)
新买的电脑,无论是台式机,还是笔记本,买来之后,通常都有一些事情,是必须要做的,特别是 Windows 电脑。 以下详细描述: 1. 连上互联网,更新 Wiindows 系统。 主要原因是,自从 Wi...
RabbitMQ 工作队列
每日一句 如果你执意追逐我的幻影,迟早会被真正的我打败。 https://www.ylcoder.top/post/1649241412 概述 工作队列(也称为任务队列)的主要思想是避免立即执行资源密...
识别 UTF-8 编码
思路:如果GBK中文字节流我们使用 UTF-8 编码,会出现未知字符�,字节代表数字为 -65, -67。 所以先尝试用 utf-8 编码,然后获取字节流,判断其中是否存在未知字符。 流程:当直接使用...
设计基础-常用的设计模式杂记
计算机工程师在某些方面与架构师做同样的工作,特别是在处理项目时。[En]Computer engineers do the same work as architects in some ways, ...
关于ASP.NET WEB API(OWIN WEBAPI)的几个编码最佳实践总结
近期工作比较忙,确实没太多精力与时间写博文,博文写得少,但并不代表没有研究与总结,也不会停止我继续分享的节奏,最多有可能发博文间隔时间稍长一点。废话不多说,直接上干货,虽不是主流的ASP.NET CO...
Jenkins 获取构建队列排队时间 queueDuration
背景 我们最近在对 Jenkins 的构建做一些监控,包括 build 时长、队列排队时长、构建结果(成功/失败/abort)等数据。 我们在 Jenkins Shared Library 中获取这些...
地址解析协议(ARP) 分析
什么是ARP协议 ARP( A ddress R esolution P rotocol)— 地址解析协议 ,用于将IP地址解析为MAC地址。复杂来说,ARP用于32位IPv4地址和以太网的48位MA...
设计模式之模板方法模式
在我们的实际开发中,如果一个方法非常复杂,如果我们把所有的逻辑都写在一个方法中,维护起来非常困难,当我们想要替换它们的时候,我们必须重写一些步骤,所以代码的可扩展性很差。当你遇到这种情况时,你应该考虑...
【每日算法】二分查找法II
left,right=1,n while left<=right: mid="left+(right-left)//2" if 条件: right="mid+1&q...