美文网首页
1.Disruptor 性能优势

1.Disruptor 性能优势

作者: 香沙小熊 | 来源:发表于2021-05-22 11:54 被阅读0次
1. ArrayBlockingQueue
public class ArrayBlockingQueue4Test {

    public static void main(String[] args) {
        final ArrayBlockingQueue<Data> queue = new ArrayBlockingQueue<Data>(100000000);
        final long startTime = System.currentTimeMillis();
        //向容器中添加元素
        new Thread(new Runnable() {

            public void run() {
                long i = 0;
                while (i < Constants.EVENT_NUM_OHM) {
                    Data data = new Data(i, "c" + i);
                    try {
                        queue.put(data);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    i++;
                }
            }
        }).start();

        new Thread(new Runnable() {
            public void run() {
                int k = 0;
                while (k < Constants.EVENT_NUM_OHM) {
                    try {
                        queue.take();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    k++;
                }
                long endTime = System.currentTimeMillis();
                System.out.println("ArrayBlockingQueue costTime = " + (endTime - startTime) + "ms");
            }
        }).start();
    }
}
public class Data implements Serializable {

    private static final long serialVersionUID = 2035546038986494352L;
    private Long id ;
    private String name;
    
    public Data() {
    }
    public Data(Long id, String name) {
        super();
        this.id = id;
        this.name = name;
    }

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    
}
public interface Constants {

    int EVENT_NUM_OHM = 100000000;
    
    int EVENT_NUM_FM = 50000000;
    
    int EVENT_NUM_OM = 10000000;
    
}
public class DataConsumer implements EventHandler<Data> {

    private long startTime;
    private int i;

    public DataConsumer() {
        this.startTime = System.currentTimeMillis();
    }

    public void onEvent(Data data, long seq, boolean bool)
            throws Exception {
        i++;
        if (i == Constants.EVENT_NUM_OHM) {
            long endTime = System.currentTimeMillis();
            System.out.println("Disruptor costTime = " + (endTime - startTime) + "ms");
        }
    }

}
ArrayBlockingQueue costTime = 27162ms
2. Disruptor
public class DisruptorSingle4Test {

    public static void main(String[] args) {
        int ringBufferSize = 65536;
        final Disruptor<Data> disruptor = new Disruptor<Data>(
                 new EventFactory<Data>() {
                    public Data newInstance() {
                        return new Data();
                    }
                },
                ringBufferSize,
                Executors.newSingleThreadExecutor(),
                ProducerType.SINGLE, 
                //new BlockingWaitStrategy()
                new YieldingWaitStrategy()
                );

        DataConsumer consumer = new DataConsumer();
        //消费数据
        disruptor.handleEventsWith(consumer);
        disruptor.start();
        new Thread(new Runnable() {

            public void run() {
                RingBuffer<Data> ringBuffer = disruptor.getRingBuffer();
                for (long i = 0; i < Constants.EVENT_NUM_OHM; i++) {
                    long seq = ringBuffer.next();
                    Data data = ringBuffer.get(seq);
                    data.setId(i);
                    data.setName("c" + i);
                    ringBuffer.publish(seq);
                }
            }
        }).start();
    }
}
Disruptor costTime = 10255ms

2.5倍以上

注意:ArrayBlockingQueue 在一个生产者一个消费者的性能比自身多生产多消费模式要好,而Disruptor在多生产者多消费者性能更出色

相关文章

  • 1.Disruptor 性能优势

    1. ArrayBlockingQueue 2. Disruptor 2.5倍以上 注意:ArrayBlockin...

  • 并发编程之Disruptor-2.核心介绍

    1.Disruptor核心组件 RingBuffer Sequence Sequencer Sequence Ba...

  • LSM-tree vs B-tree

    lsm-tree vs B-tree 直觉来看,LSM-tree的优势在于写性能, B-tree的优势在于读性能,...

  • 机器视觉性能

    二、性能优势 机器视觉的性能优势如下:· 非接触检测方式:对观测者、被观测者都不会产生任何损伤,从而提高系统的可靠...

  • Kotlin随笔

    Coroutine优势:性能快,语法简单,业务清晰Thread性能差,Callback业务嵌套过多时容易产生回调地...

  • 带来许多性能优势

  • nginx

    Nginx 是一个高性能的 Web 和反向代理服务器 优势 高性能: 作为WEB服务器, 性能好开销低, 10,0...

  • SpringBoot学习(七)—— springboot快速整合

    Redis缓存 @[toc] 简介 redis是一个高性能的key-value数据库 优势 性能强,适合高度的读写...

  • Java8Lambda表达式延迟执行

    总结:采用lambda可以对资源有效的分配,从而达到节省性能的优势

  • Redis

    什么是Redis redis是一个单线程、高性能的key-value存储系统 Redis的特点和优势 性能极高 –...

网友评论

      本文标题:1.Disruptor 性能优势

      本文链接:https://www.haomeiwen.com/subject/jotbjltx.html