package com.disruptor.test3; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.CountDownLatch; import org.junit.Test; public class ArrayBlockingQueueTest { @Test public void test() throws InterruptedException { long cost = System.currentTimeMillis(); final CountDownLatch l = new CountDownLatch(1); final BlockingQueue<Long> bq = new ArrayBlockingQueue<Long>(4096); Runnable p = new Runnable() { public void run() { for (int i = 0; i < ConstantsUtil.MAX_LOOP; i++) { try { bq.put((long) i); } catch (InterruptedException e) { e.printStackTrace(); } } } }; Runnable c = new Runnable() { public void run() { while (true) { try { long i = bq.take(); //System.out.println(i); if (i == ConstantsUtil.MAX_LOOP - 1) { l.countDown(); } } catch (InterruptedException e) { e.printStackTrace(); } } } }; new Thread(c).start(); new Thread(p).start(); l.await(); System.out.println("cost:" + (System.currentTimeMillis() - cost)); } }
package com.disruptor.test3; public abstract class ConstantsUtil { static int MAX_LOOP = 1000000000; }
package com.disruptor.test3; import java.util.concurrent.CountDownLatch; import org.junit.Test; import com.lmax.disruptor.BatchEventProcessor; import com.lmax.disruptor.RingBuffer; import com.lmax.disruptor.SequenceBarrier; import com.lmax.disruptor.YieldingWaitStrategy; public class DisruptorTest { private static final int BUFFER_SIZE = 4096; @Test public void test() throws InterruptedException { long cost = System.currentTimeMillis(); CountDownLatch l = new CountDownLatch(1); //创建RingBuffer RingBuffer<ValueEvent> ringBuffer = RingBuffer.createSingleProducer( ValueEvent.EVENT_FACTORY, BUFFER_SIZE, new YieldingWaitStrategy()); //创建序列栅栏 SequenceBarrier sequenceBarrier = ringBuffer.newBarrier(); //创建消费者 MyEventHandler handler = new MyEventHandler(l); //事件执行者 BatchEventProcessor<ValueEvent> batchEventProcessor = new BatchEventProcessor<ValueEvent>( ringBuffer, sequenceBarrier, handler); //序列由栅栏统一计算 ringBuffer.addGatingSequences(batchEventProcessor.getSequence()); new Thread(batchEventProcessor).start(); for (long i = 0; i < ConstantsUtil.MAX_LOOP; i++) { long next = ringBuffer.next(); //通过序列从环中,获取消息,没有则由ValueEvent.EVENT_FACTORY工厂创建空事件 ValueEvent event = ringBuffer.get(next); //填充数据 event.setValue(i); //将环中的数据发布出去,发布之后,实际也是直接通过事件消费 ringBuffer.publish(next); } l.await(); System.out.println("cost:" + (System.currentTimeMillis() - cost)); } }
package com.disruptor.test3; import java.util.concurrent.CountDownLatch; import com.lmax.disruptor.EventHandler; public class MyEventHandler implements EventHandler<ValueEvent> { private CountDownLatch l; public long count = 0; public MyEventHandler() { }; public MyEventHandler(CountDownLatch l) { this.l = l; }; public void onEvent(ValueEvent event, long arg1, boolean arg2) throws Exception { long i = event.getValue(); //System.out.println(i); if (i == ConstantsUtil.MAX_LOOP - 1) { l.countDown(); } } }
package com.disruptor.test3; import com.lmax.disruptor.EventFactory; public final class ValueEvent { private long value; public long getValue() { return value; } public void setValue(final long value) { this.value = value; } public final static EventFactory<ValueEvent> EVENT_FACTORY = new EventFactory<ValueEvent>() { public ValueEvent newInstance() { return new ValueEvent(); } }; }
1亿: Disrupter :3910 ms BlockQueue: 246211 ms 4s VS 25s 6倍 10亿 Disrupter :36767 ms BlockQueue: 231872 ms 37s vs 232s 6倍
相关推荐
Conversant ConcurrentQueue、Disruptor BlockingQueue 和 ConcurrentStack Disruptor是Java中性能最高的线程内传输机制。 Conversant Disruptor 是这种环形缓冲区中性能最高的实现,因为它几乎没有开销,并且采用了...
### Disruptor并发框架知识点详解 #### 一、Disruptor简介及原理 **Disruptor** 是一款高性能、低延迟的并发框架,它通过无锁设计实现了高效的队列操作,从而大大提升了多线程环境下的性能表现。该框架于2011年...
SpringBoot整合Disruptor并发编程框架是针对高并发场景下性能优化的一种技术实践。Disruptor是由LMAX公司开发的一款高性能、低延迟的并发工具,它通过消除线程间的锁竞争,大大提升了多线程环境下的处理速度。...
《Spring Boot Starter Disruptor深度解析》 在现代软件开发中,高性能和低延迟往往是系统设计的关键要素。Spring Boot作为Java领域最受欢迎的微服务框架,提供了丰富的启动器(starters)来简化开发工作。"spring-...
disruptor-3.4.4.jar 官方github下载 亲测可用,大家赶紧下载吧 后续再补充其他常用jar(但不好下载的)
Disruptor3.x Disruptor使用方式 EventHandler[] eventHandlers=new DisruptorEventHandler[]{new DisruptorEventHandler()}; DisruptorPublisher dp=new DisruptorPublisher(1024, eventHandlers); dp.start(); ...
《Disruptor技术详解——基于DisruptorDemo.zip实例解析》 Disruptor,由LMAX公司开发并开源,是一款高性能、低延迟的并发工具,主要用于优化多线程间的通信。它采用一种环形缓冲区(Ring Buffer)的设计,极大地...
Disruptor框架是由LMAX公司开发的一款高效的无锁内存队列。使用无锁的方式实现了一个环形队列。据官方描述,其性能要比BlockingQueue至少高一个数量级。根据GitHub上的最新版本源码打出的包,希望对大家有帮助。
Disruptor是由LMAX公司开发的一种高性能的并发编程框架,主要应用于金融交易系统。它通过优化数据共享方式,显著提高了多线程环境下的处理速度。在"Disruptor 多个消费者"的场景中,我们可以深入理解Disruptor如何...
《Disruptor 框架详解与应用实例》 Disruptor 是一款高性能的并发工具库,由英国的 LMAX 公司开发并开源。它主要用于优化多线程环境下的数据共享,尤其在金融交易系统中表现卓越。Disruptor 的核心设计是一个环形...
Disruptor是一款高性能的并发工具库,由LMAX公司开发并开源,主要应用于高频率交易系统。它通过优化线程间通信的方式,极大地提升了多线程环境下的数据处理速度。Disruptor的设计理念是避免传统的锁机制,转而采用一...
Disruptor是由LMAX公司开发的一种高性能的并发编程框架,主要应用于金融交易系统。它以其高效、低延迟的事件处理机制而闻名。在C++版本的Disruptor中,我们同样可以享受到这种高效的并发能力,尤其适用于需要大量...
Error: java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor.<init>(Lcom/lmax/disruptor/EventFactory;ILjava/util/concurrent/ThreadFactory;Lcom/lmax/disruptor/dsl/ProducerType;Lcom/lmax/...
赠送jar包:disruptor-3.3.0.jar; 赠送原API文档:disruptor-3.3.0-javadoc.jar; 赠送源代码:disruptor-3.3.0-sources.jar; 赠送Maven依赖信息文件:disruptor-3.3.0.pom; 包含翻译后的API文档:disruptor-...
Disruptor是一款高性能的并发框架,它通过使用Ring Buffer和基于事件的处理方式来消除锁竞争,提升系统性能。在使用Disruptor过程中,开发者可能会遇到`FatalExceptionHandler`的错误,这通常是由于处理流程中的异常...
LMAX Disruptor是一款高性能的消息处理框架,由LMAX公司开发并开源,它在金融交易领域有着广泛的应用。Disruptor的设计目标是解决多线程环境下的数据共享问题,通过优化并发性能,实现极低的延迟和高吞吐量。在Java...
disruptor-3.4.2.jar 工具jar包 及 disruptor-3.4.2-sources.jar, Disruptor它是一个开源的并发框架,并获得2011 Duke’s 程序框架创新奖,能够在无锁的情况下实现网络的Queue并发操作,是 log4j2 引用的 jar 包
赠送jar包:disruptor-3.3.0.jar; 赠送原API文档:disruptor-3.3.0-javadoc.jar; 赠送源代码:disruptor-3.3.0-sources.jar; 赠送Maven依赖信息文件:disruptor-3.3.0.pom; 包含翻译后的API文档:disruptor-...
Java工具:高性能并发工具Disruptor简单使用 在Java编程中,高效并发处理是优化系统性能的关键之一。Disruptor,由LMAX公司开源的一款并发框架,为处理高并发场景提供了一种新颖且高效的解决方案。它通过消除锁和...