Disruptor 高性能堆内队列 系列一
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)
本文作者: Nicksxs
创建时间: 2022-02-03
本文链接: Disruptor 系列一
很久之前就听说过这个框架,不过之前有点跟消息队列混起来,这个也是种队列,但不是跟 rocketmq,nsq 那种一样的,而是在进程内部提供队列服务的,偏向于取代ArrayBlockingQueue
,因为这个阻塞队列是使用了锁来控制阻塞,关于并发其实有一些通用的最佳实践,就是用锁,即使是 JDK 提供的锁,也是比较耗资源的,当然这是跟不加锁的对比,同样是锁,JDK 的实现还是性能比较优秀的。常见的阻塞队列中例如 ArrayBlockingQueue
和 LinkedBlockingQueue
都有锁的身影的存在,区别在于 ArrayBlockingQueue
是一把锁,后者是两把锁,不过重点不在几把锁,这里其实是两个问题,一个是所谓的 lock free
, 对于一个单生产者的 disruptor
来说,因为写入是只有一个线程的,是可以不用加锁,多生产者的时候使用的是 cas 来获取对应的写入坑位,另一个是解决“伪共享”问题,后面可以详细点分析,先介绍下使用首先是数据源
复制代码
事件生产
复制代码
事件处理器
复制代码
主方法代码
复制代码
运行下可以看到运行结果
这里其实就只是最简单的使用,生产者只有一个,然后也不是批量的。
版权声明: 本文为 InfoQ 作者【Nick】的原创文章。
原文链接:【http://xie.infoq.cn/article/20e5a40422f1275965792dbeb】。文章转载请联系作者。
评论