写点什么

Disruptor

1 人感兴趣 · 17 次引用

  • 最新
  • 推荐

高性能无锁队列 Disruptor 核心原理分析及其在 i 主题业务中的应用

本文首先介绍了Disruptor高性能内存队列的基本概念、使用Demo、高性能原理及源码分析,最后通过两个例子介绍了Disruptor在i主题业务中的应用。

https://static001.geekbang.org/infoq/d3/d3cd67b1f1e39738455d2a81859f0685.webp?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Disruptor 在撮合引擎的实践|得物技术

Disruptor是基于事件异步驱动模型实现的,采用RingBuffer数据结构,支持高并发、低延时、高吞吐量的高性能工作队列。用于解决内存队列的延迟问题,不同于常用分布式消息中间件RocketMQ、Kafka,而是单机的本地内存队列,类似JDK的ArrayBlockingQueue等队列。

https://static001.geekbang.org/infoq/76/76614ef5d964c5c95188f0a85e3c35e8.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Disruptor 高性能堆内队列 系列二

用户头像
Nick
2022-06-07

这里开始慢慢深入的讲一下 disruptor,首先是 lock free , 相比前面介绍的两个阻塞队列,disruptor 本身是不直接使用锁的,因为本身的设计是单个线程去生产,通过 cas 来维护头指针,不直接维护尾指针,这样就减少了锁的使用,提升了性能;第二个是这次重点

https://static001.geekbang.org/infoq/76/76614ef5d964c5c95188f0a85e3c35e8.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Disruptor 高性能堆内队列 系列一

用户头像
Nick
2022-06-06

很久之前就听说过这个框架,不过之前有点跟消息队列混起来,这个也是种队列,但不是跟 rocketmq,nsq 那种一样的,而是在进程内部提供队列服务的,偏向于取代ArrayBlockingQueue,因为这个阻塞队列是使用了锁来控制阻塞,关于并发其实有一些通用的最佳实践,

性能测试中 Disruptor 框架 ExceptionHandler 使用分享

用户头像
FunTester
2022-03-16

在使用Disruptor设计新的性能测试模型的过程中,在使用过程中,偶然发现会有一些异常,然后QPS就会不断下降,直到最后QPS能力降为零。经过查询相关资料后发现了一个小坑:com.lmax.disruptor.ExceptionHandler。

性能测试中 Disruptor 框架 shutdown 失效的问题分享

用户头像
FunTester
2022-03-02

在基于Disruptor开发新的性能测试QPS模型时候,中间遇到了很多问题,踩了很多坑。今天就分享一个比较典型的问题:shutdown失效。

Java&Go 高性能队列之 Disruptor 性能测试

用户头像
FunTester
2022-02-14

之前写过Java&Go高性能队列之LinkedBlockingQueue性能测试之后,就一直准备这这篇文章,作为准备内容的过程中也写过一些Disruptor高性能消息队列的应用文章:高性能队列Disruptor在测试中应用和千万级日志回放引擎设计稿。

https://static001.geekbang.org/infoq/6c/6c37eef959c73807b3069f35e68fb0af.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Java&Go 高性能队列之 LinkedBlockingQueue 性能测试

用户头像
FunTester
2022-01-10

在写完高性能队列Disruptor在测试中应用和千万级日志回放引擎设计稿之后,我就一直在准备Java & Go 语言几种高性能消息队列的性能测试,其中选取了几种基准测试场景以及在性能测试中的应用场景。

高性能队列 Disruptor 在测试中应用

用户头像
FunTester
2021-12-28

最近在研究goreplay的源码的过程中,感觉有些思路还是很值得借鉴。所以自己立了一个flag,实现一个千万级日志回放功能。但是在这个实现的过程中遇到一个棘手的问题:Java自带的LinkedBlockingQueue比较难以直接满足需求场景和性能要求。

https://static001.geekbang.org/infoq/8a/8a558b629b26fc8e062bbe1c74a910b3.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

【优化技术专题】「线程间的高性能消息框架」终极关注 Disruptor 的核心源码和 Java8 的 @Contended 伪共享指南

用户头像
洛神灬殇
2021-10-11

Disruptor关联好任务处理事件后,就调用了disruptor.start() 方法,可以看出在调用了 start() 方法后,消费者线程就已经开启。

https://static001.geekbang.org/infoq/0b/0b7434ed64c119e9858bcdaea07cff71.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

【优化技术专题】「线程间的高性能消息框架」再次细节领略 Disruptor 的底层原理和优势分析

用户头像
洛神灬殇
2021-10-09

首先Disruptor是为了解决高并发缓存的队列,为线程间通讯提供高效的性能,它是如何做到无阻塞、多生产、多消费的?

https://static001.geekbang.org/infoq/6a/6abfc23f978daadfa6edfc78e2653fe3.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

【优化技术专题】「线程间的高性能消息框架」深入浅出 Disruptor 的使用和原理

用户头像
洛神灬殇
2021-09-11

CPU 为了更快的执行代码。于是当从内存中读取数据时,并不是只读自己想要的部分。而是读取足够的字节来填入高速缓存行。根据不同的 CPU ,高速缓存行大小不同。如 X86 是 32BYTES ,而 ALPHA 是 64BYTES 。并且始终在第 32 个字节或第 64 个字节处对齐。

https://static001.geekbang.org/infoq/34/34cd41b66ab3be23f7ac40136a4c5419.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Disruptor 源码解读

用户头像
lich0079
2021-04-20

本文适合对Disruptor框架和源码有初步了解的读者。 对Disruptor的运行机制在源码级别上做出解读。

volatile 关键字需要知道的几点

用户头像
lich0079
2021-04-18

volatile 可见性,false sharing, lazyset 特性。

Cobar SQL 审计的设计与实现

用户头像
捉虫大师
2021-03-22

回头来看对性能的极致追求可能或许过于"偏执",创造的收益在旁人眼里看来并没有那么大,加一台机器就能搞定的事情非要搞这么复杂。但这份“偏执”却是我们对技术最初的追求,生活不止眼前的苟且,还有诗和远方。

https://static001.geekbang.org/infoq/ed/ed863933c4ee9902c71018042c8f1fe6.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Disruptor 高效的秘密 -Sequencer

用户头像
Rayjun
2020-05-01

上篇文章已经讲过了 RingBuffer 了, RingBuffer 是消息的容器,但是 Disruptor 中最复杂的部分在于如何并发控制消息的增加和消费,而这部分由 Senquencer 来完成。

https://static001.geekbang.org/infoq/f4/f45b1ec4f7a4b8d604d0ec7597393f43.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Disruptor 为何这么快

用户头像
Rayjun
2020-04-25

看了 Disruptor 的表现才发现不是 Java慢,而是打开 Java 的方式不对

Disruptor_Disruptor技术文章_InfoQ写作社区