没有合适的资源?快使用搜索试试~ 我知道了~
Disruptor并行框架面试题收录
需积分: 2 0 下载量 153 浏览量
2024-05-09
16:04:48
上传
评论
收藏 22KB DOCX 举报
温馨提示
试读
4页
Disruptor并行框架面试题收录
资源推荐
资源详情
资源评论
Disruptor 的基本概念是什么?
Disruptor 是一个开源的内存消息传递框架(作用于线程间,如果需要消息
持久化,那就是 MQ 更合适),主要用于实现低延迟的高性能并发处理。它通过
使用环形缓冲区(RingBuffer)和一系列序列(Sequences)来实现生产者和消
费者的无锁并发操作。
Disruptor 的核心组件?
1. RingBuffer(环形缓冲区):
Disruptor 使用 RingBuffer 来存储事件。RingBuffer 是一个固定大小的数
组,通过数组下标进行事件的读写操作。Disruptor 中的 RingBuffer 使用了预
分配的方式,即在初始化时就会申请一定数量的内存空间来存储事件。数组长度
设置为 2 的 N 次方,通过位运算,可以加快定位速度。
为了避免垃圾回收,采用数组而非链表。同时,数组对处理器的缓存机制更
加友好。
下标采取递增的形式。不用担心 index 溢出的问题。index 是 long 类型,即
使 100 万 QPS 的处理速度,也需要 30 万年才能用完。
2. Sequence(序列号):
每个消费者都有一个 Sequence 来表示它当前处理的事件位置。Sequence 是
一个单调递增的整数。在 Disruptor 中,通过 Sequence 来实现事件的有序处理,
保证每个事件只能被一个消费者处理。Disruptor 使用序列号来追踪生产者和消
费者的状态。生产者在发布事件时会更新序列号,而消费者在消费事件时会读取
并更新自己的序列号。这种机制允许多个生产者和消费者并行工作,而无需使用
锁机制来协调访问
3. SequenceBarrier(序列屏障):
序列屏障用于保证事件的有序性。它通过维护一组 Sequence 来跟踪消费者
的进度,当生产者发布新的事件时,序列屏障会检查是否所有消费者都已处理完
前面的事件,如果是,则通知生产者可以发布新的事件,确保生产者不会覆盖消
费者未来得及处理的消。
4. EventProcessor(事件处理器):
事件处理器是 Disruptor 中的核心组件,监听 RingBuffer 的事件,并消费
可用事件。每个事件处理器都会不断地从 RingBuffer 中读取事件,并进行相应
的处理。
Disruptor 中的事件处理器是通过继承抽象类 BatchEventProcessor 来实现
的,它通过不断调用用户定义的事件处理方法来处理事件。
资源评论
搬运工007
- 粉丝: 1728
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功