三步创建Disruptor应用
来源:互联网 发布:怎样查看电脑mac地址 编辑:程序博客网 时间:2024/05/23 11:56
Disruptor是一个高性能的用于线程间消息处理的开源框架。它的目标就是快.
我们知道,java.util.concurrent.ArrayBlockingQueue 是一个非常优秀的有界队列实现。Disruptor与之相比,性能更加的优秀。
完整的性能报告在这里.
Disruptor内部使用了RingBuffer,它是Disruptor的核心的数据结构。和其它的RingBuffer实现不同,Disruptor没有尾指针。这样实现是经过深思熟虑的,你可以看这篇文档了解其细节。
更多的参考资料请参照官方文档以及并发编程网上翻译的一些文章。
本文主要参考Disruptor入门这篇文章。
本文的代码已全部放在github上。
在正式使用Disruptor之前,我们先声明一个ObjectEvent类,它用来传递消息的内容。
12345678910111213
public class ObjectEvent {private Object object;public Object getObject() {return object;}public ObjectEvent setObject(Object object) {this.object = object;return this;}}
- 第一步,创建一个Disruptor对象
1234
Executor executor = Executors.newCachedThreadPool();int bufferSize = 1024;Disruptor<ObjectEvent> disruptor = new Disruptor<>(ObjectEvent::new, bufferSize, executor,ProducerType.SINGLE, new LiteBlockingWaitStrategy());
这是一个单一生产者的例子,如果在你的代码中仅仅有一个事件生产者,那么可以设置为单一生产者模式来提高系统的性能。
第一个参数用来在ring buffer中创建event,第二个参数是ring buffer的大小,第三个参数是消费者处理消息而使用的线程池。第四个参数是单或者多生产者模式,地五个参数是可选的等待策略。
以上代码主要用来设置RingBuffer.
- 第二步,创建消息处理的processors
12345678910
public static void handleEvent1(ObjectEvent event, long sequence, boolean endOfBatch) {System.out.println("handler-1: " + event.getObject());}public static void handleEvent2(ObjectEvent event, long sequence, boolean endOfBatch) {System.out.println("handler-2: " + event.getObject());}...disruptor.handleEventsWith(App::handleEvent1);disruptor.handleEventsWith(App::handleEvent2);...
定义了两个processor,并使用handleEventsWith注册到Disruptor。注意这个方法可以使用职责链模式,例如handleEventsWith(A).then(B)
。
然后就可以启动Disruptor了:
1
disruptor.start();
- 第三步,创建生产者
这一步我们可以创建一个生产者来发布消息(事件)。
12345678
private static void produceEvents(Disruptor<ObjectEvent> disruptor) throws InterruptedException {RingBuffer<ObjectEvent> ringBuffer = disruptor.getRingBuffer();for (long l = 0; true; l++) {String obj = "Test-" + l;ringBuffer.publishEvent((event, sequence) -> event.setObject(obj));Thread.sleep(1000);}}
通过以上三步,我们就可以创建一个简单的应用Disruptor的例子了。
0 0
- 三步创建Disruptor应用
- 三步创建Disruptor应用
- 三步创建Disruptor应用
- disruptor(三)
- disruptor应用
- java--创建对象三步
- Android三步创建popWindow
- Disruptor的开发应用
- 简单三步创建文字水彩肖像
- 三步搞定ANDROID应用图片缓存
- 三步搞定ANDROID应用图片缓存
- 三步搞定android应用图片缓存
- 三步搞定android应用图片缓存
- 三步搞定android应用图片缓存
- 三步搞定android应用图片缓存
- 三步学会ajax开发应用
- 三.创建应用
- Disruptor笔记(三)-处理模式
- 56岁麦当娜穿渔网袜双手托胸 性感魅力不减当年
- 有你,不孤独
- Apache 2.4 For Windows 安装配置说明
- 关于Android事件传递机制
- android当中SQLite的使用
- 三步创建Disruptor应用
- 李英爱携4岁女儿拍画报 大眼睛萌娃清新似妈妈
- 发表SCI或EI类英文文章的一些投稿经验
- Java for循环的几种用法分析
- Android中保持屏幕常亮的几种方式
- HDU 4288 线段树
- 常用的正则表达式
- ios--tableview加入购物车飞入效果
- iOS开发多线程篇—多线程简单介绍