首页  

disruptor简介及核心概念     所属分类 disruptor 浏览量 912
队列 阻塞队列 BlockingQueue
在不同的线程之间交换数据

Disruptor 实现了其他队列没有的特性
同一个 事件 可以有多个消费者,消费者之间既可以并行处理,也可以相互依赖形成处理的先后次序(形成一个依赖图) 
预分配用于存储事件的空间
极度优化和无锁的设计 


核心组件 RingBuffer Sequence 每个消费者和Disruptor本身都会维护一个Sequence 注意 防止不同的 Sequence 之间的CPU缓存伪共享(Flase Sharing)问题 Sequence Barrier 保持Sequencer的引用 Consumer是否还有可处理事件的逻辑 Wait Strategy 消费者如何等待生产者将事件(Event)放入Disruptor中 Event EventProcessor 消费者Sequence + 主事件循环(main event loop) BatchEventProcessor EventHandler 用户实现的接口,用于处理事件 Producer
事件广播(Multicast Events) Disruptor和队列最大的区别 对同一数据进行多个并行操作 日志(将数据持久到日志文件中) 复制(将数据发送到其他的机器上,以确保存在数据远程副本) 业务逻辑处理 消费者依赖关系图(Consumer Dependency Graph) Disruptor提供了多个消费者之间的协作功能 让日志处理和远程副本写入执行完之后再执行业务处理流程,这个功能被称之为gating gating 两种场景 1 确保生产者不要超过消费者 通过调用RingBuffer.addGatingConsumers()增加相关的消费者至Disruptor来完成 2 通过构造包含必须先完成的消费者的Sequence的SequenceBarrier来实现 有三个消费者监听来自RingBuffer的事件 依赖关系图 ApplicationConsume r依赖 JournalConsumer 和 ReplicationConsumer 事件预分配(Event Preallocation) 减少GC停顿(在低延迟的C/C++系统中,由于内存分配器的争用,大量的内存分配也会导致问题) 事件预分配内存 EventFactory课自定义 新的数据发布时,更新事件对象 确保操作线程安全 可选择的无锁 无锁算法 内存可见性和正确性使用内存屏障和CAS 仅BlockingWaitStrategy中使用了lock 仅仅是为了使用Condition 唤醒 park 的消费线程 许多低延迟系统使用自旋(busy-wait)来避免使用Condition造成的抖动 但是大量的自旋(busy-wait)会导致性能的下降,特别是CPU资源严重受限的情况下 例如虚拟环境中的Web服务器
影响性能的两个参数 wait strategy 和 producer的类型 单生产者 vs 多生产者 如果只有一个线程写数据,可以设置成单生产者来提升性能 Disruptor< LongEvent> disruptor = new Disruptor(factory, bufferSize, DaemonThreadFactory.INSTANCE, ProducerType.SINGLE, new BlockingWaitStrategy()); ProducerType.SINGLE BlockingWaitStrategy 等待策略 BlockingWaitStrategy 默认策略是BlockingWaitStrategy 使用锁和condition来控制线程的唤醒 最低效的策略,但其对CPU的消耗最小并且在各种不同部署环境中能提供更加一致的性能表现 SleepingWaitStrategy 性能表现跟 BlockingWaitStrategy 差不多,对 CPU 的消耗也类似, 但其对生产者线程的影响最小,通过使用LockSupport.parkNanos(1)来实现循环等待 一般来说Linux系统会暂停一个线程约60µs 平均延迟会高一些 常见场景是异步日志 YieldingWaitStrategy 调用Thread.yield 可以使用在低延迟系统的策略之一 BusySpinWaitStrategy 性能最好,适合用于低延迟的系统 在要求极高性能且事件处理线程数小于CPU逻辑核心数的场景中 推荐使用此策略 例如 CPU开启超线程的特性 清除Ring Buffer中的对象 可在处理事件后清除事件

上一篇     下一篇
H2 TCP server 模式

spring aop 代理对象生成

影响商业的50本书第20到29本

Disruptor 和 BlockingQueue 性能测试比较

专利受理和授权及奖金

三分钟学会杜邦分析