当前位置: 首页 > news >正文

站长网网站模板网站做百度推广要多少钱

站长网网站模板,网站做百度推广要多少钱,兰州新闻最新消息,深圳建筑行业公司这里写自定义目录标题 一 、背景二 、Disruptor介绍三 、Disruptor 的核心概念3.1 Ring Buffer3.2 Sequence Disruptor3.3 Sequencer3.4 Sequence Barrier3.5 Wait Strategy3.6 Event3.7 EventProcessor3.8 EventHandler3.9 Producer 四、案例-demo五、总结 一 、背景 工作中遇… 这里写自定义目录标题 一 、背景二 、Disruptor介绍三 、Disruptor 的核心概念3.1 Ring Buffer3.2 Sequence Disruptor3.3 Sequencer3.4 Sequence Barrier3.5 Wait Strategy3.6 Event3.7 EventProcessor3.8 EventHandler3.9 Producer 四、案例-demo五、总结 一 、背景 工作中遇到项目使用Disruptor做消息队列对你没看错不是Kafka也不是rabbitmq。Disruptor有个最大的优点就是快还有一点它是开源的哦下面做个简单的记录。 二 、Disruptor介绍 Disruptor 是英国外汇交易公司LMAX开发的一个高性能队列研发的初衷是解决内存队列的延迟问题在性能测试中发现竟然与I/O操作处于同样的数量级。基于 Disruptor 开发的系统单线程能支撑每秒 600 万订单2010 年在 QCon 演讲后获得了业界关注。Disruptor是一个开源的Java框架它被设计用于在生产者—消费者producer-consumer problem简称PCP问题上获得尽量高的吞吐量TPS和尽量低的延迟从功能上来看Disruptor 是实现了“队列”的功能而且是一个有界队列。那么它的应用场景自然就是“生产者-消费者”模型的应用场合了Disruptor是LMAX在线交易平台的关键组成部分LMAX平台使用该框架对订单处理速度能达到600万TPS除金融领域之外其他一般的应用中都可以用到Disruptor它可以带来显著的性能提升其实Disruptor与其说是一个框架不如说是一种设计思路这个设计思路对于存在“并发、缓冲区、生产者—消费者模型、事务处理”这些元素的程序来说Disruptor提出了一种大幅提升性能TPS的方案 Disruptor的github主页 三 、Disruptor 的核心概念 先从了解 Disruptor 的核心概念开始来了解它是如何运作的。下面介绍的概念模型既是领域对象也是映射到代码实现上的核心对象。 3.1 Ring Buffer 如其名环形的缓冲区。曾经 RingBuffer 是 Disruptor 中的最主要的对象但从3.0版本开始其职责被简化为仅仅负责对通过 Disruptor 进行交换的数据事件进行存储和更新。在一些更高级的应用场景中Ring Buffer 可以由用户的自定义实现来完全替代。 3.2 Sequence Disruptor 通过顺序递增的序号来编号管理通过其进行交换的数据事件对数据(事件)的处理过程总是沿着序号逐个递增处理。一个 Sequence 用于跟踪标识某个特定的事件处理者( RingBuffer/Consumer )的处理进度。虽然一个 AtomicLong 也可以用于标识进度但定义 Sequence 来负责该问题还有另一个目的那就是防止不同的 Sequence 之间的CPU缓存伪共享(Flase Sharing)问题。 3.3 Sequencer Sequencer 是 Disruptor 的真正核心。此接口有两个实现类 SingleProducerSequencer、MultiProducerSequencer 它们定义在生产者和消费者之间快速、正确地传递数据的并发算法。 3.4 Sequence Barrier 用于保持对RingBuffer的 main published Sequence 和Consumer依赖的其它Consumer的 Sequence 的引用。Sequence Barrier 还定义了决定 Consumer 是否还有可处理的事件的逻辑。 3.5 Wait Strategy 定义 Consumer 如何进行等待下一个事件的策略。注Disruptor 定义了多种不同的策略针对不同的场景提供了不一样的性能表现 3.6 Event 在 Disruptor 的语义中生产者和消费者之间进行交换的数据被称为事件(Event)。它不是一个被 Disruptor 定义的特定类型而是由 Disruptor 的使用者定义并指定。 3.7 EventProcessor EventProcessor 持有特定消费者(Consumer)的 Sequence并提供用于调用事件处理实现的事件循环(Event Loop)。 3.8 EventHandler Disruptor 定义的事件处理接口由用户实现用于处理事件是 Consumer 的真正实现。 3.9 Producer 即生产者只是泛指调用 Disruptor 发布事件的用户代码Disruptor 没有定义特定接口或类型。 四、案例-demo 通过下面8个步骤,你就能将Disruptor Get回家啦 1、添加pom.xml依赖 dependencygroupIdcom.lmax/groupIdartifactIddisruptor/artifactIdversion3.3.4/version /dependency2、消息体Model /*** 消息体*/ Data public class MessageModel {private String message; }3、构造EventFactory public class HelloEventFactory implements EventFactoryMessageModel {Overridepublic MessageModel newInstance() {return new MessageModel();} }4、构造EventHandler-消费者 Slf4j public class HelloEventHandler implements EventHandlerMessageModel {Overridepublic void onEvent(MessageModel event, long sequence, boolean endOfBatch) {try {//这里停止1000ms是为了确定消费消息是异步的Thread.sleep(1000);log.info(消费者处理消息开始);if (event ! null) {log.info(消费者消费的信息是{},event);}} catch (Exception e) {log.info(消费者处理消息失败);}log.info(消费者处理消息结束);} }5、构造BeanManager /*** 获取实例化对象*/ Component public class BeanManager implements ApplicationContextAware {private static ApplicationContext applicationContext null;Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext applicationContext;}public static ApplicationContext getApplicationContext() { return applicationContext; }public static Object getBean(String name) {return applicationContext.getBean(name);}public static T T getBean(ClassT clazz) {return applicationContext.getBean(clazz);} }6、构造MQManager Configuration public class MQManager {Bean(messageModel)public RingBufferMessageModel messageModelRingBuffer() {//定义用于事件处理的线程池 Disruptor通过java.util.concurrent.ExecutorSerivce提供的线程来触发consumer的事件处理ExecutorService executor Executors.newFixedThreadPool(2);//指定事件工厂HelloEventFactory factory new HelloEventFactory();//指定ringbuffer字节大小必须为2的N次方能将求模运算转为位运算提高效率否则将影响效率int bufferSize 1024 * 256;//单线程模式获取额外的性能DisruptorMessageModel disruptor new Disruptor(factory, bufferSize, executor,ProducerType.SINGLE, new BlockingWaitStrategy());//设置事件业务处理器---消费者disruptor.handleEventsWith(new HelloEventHandler());// 启动disruptor线程disruptor.start();//获取ringbuffer环用于接取生产者生产的事件RingBufferMessageModel ringBuffer disruptor.getRingBuffer();return ringBuffer;}7、构造Mqservice和实现类-生产者 public interface DisruptorMqService {/*** 消息* param message*/void sayHelloMq(String message); }Slf4j Component Service public class DisruptorMqServiceImpl implements DisruptorMqService {Autowiredprivate RingBufferMessageModel messageModelRingBuffer;Overridepublic void sayHelloMq(String message) {log.info(record the message: {},message);//获取下一个Event槽的下标long sequence messageModelRingBuffer.next();try {//给Event填充数据MessageModel event messageModelRingBuffer.get(sequence);event.setMessage(message);log.info(往消息队列中添加消息{}, event);} catch (Exception e) {log.error(failed to add event to messageModelRingBuffer for : e {},{},e,e.getMessage());} finally {//发布Event激活观察者去消费将sequence传递给改消费者//注意最后的publish方法必须放在finally中以确保必须得到调用如果某个请求的sequence未被提交将会堵塞后续的发布操作或者其他的producermessageModelRingBuffer.publish(sequence);}} }8、构造测试类及方法 Slf4j RunWith(SpringRunner.class) SpringBootTest(classes DemoApplication.class) public class DemoApplicationTests {Autowiredprivate DisruptorMqService disruptorMqService;/*** 项目内部使用Disruptor做消息队列* throws Exception*/Testpublic void sayHelloMqTest() throws Exception{disruptorMqService.sayHelloMq(消息到了Hello world!);log.info(消息队列已发送完毕);//这里停止2000ms是为了确定是处理消息是异步的Thread.sleep(2000);} }测试运行结果 2020-04-05 14:31:18.543 INFO 7274 --- [ main] c.e.u.d.d.s.Impl.DisruptorMqServiceImpl : record the message: 消息到了Hello world! 2020-04-05 14:31:18.545 INFO 7274 --- [ main] c.e.u.d.d.s.Impl.DisruptorMqServiceImpl : 往消息队列中添加消息MessageModel(message消息到了Hello world!) 2020-04-05 14:31:18.545 INFO 7274 --- [ main] c.e.utils.demo.DemoApplicationTests : 消息队列已发送完毕 2020-04-05 14:31:19.547 INFO 7274 --- [pool-1-thread-1] c.e.u.d.disrupMq.mq.HelloEventHandler : 消费者处理消息开始 2020-04-05 14:31:19.547 INFO 7274 --- [pool-1-thread-1] c.e.u.d.disrupMq.mq.HelloEventHandler : 消费者消费的信息是MessageModel(message消息到了Hello world!) 2020-04-05 14:31:19.547 INFO 7274 --- [pool-1-thread-1] c.e.u.d.disrupMq.mq.HelloEventHandler : 消费者处理消息结束五、总结 其实 生成者 - 消费者 模式是很常见的通过一些消息队列也可以轻松做到上述的效果。不同的地方在于Disruptor 是在内存中以队列的方式去实现的而且是无锁的。这也是 Disruptor 为什么高效的原因。
http://www.hkea.cn/news/14412972/

相关文章:

  • 网站制作效果好卖域名的网站
  • 东莞做网站系统wordpress非常慢
  • 怎样设计网站主页网页编辑软件绿色
  • 网站设计师主要做什么的徐州抖音推广公司
  • 怎么帮客户做网站建站闵行网站建设公司纸
  • 北京大学廉政建设研究中心网站投资项目网
  • 出口网站平台wordpress怎样上传目录本
  • go语言网站开发江门网站建设方案开发
  • 网站维护需要平台和网站有什么区别
  • 微商城网站建设行情网站建设捌金手指花总十八
  • 找素材的网站大全论坛网站开发成本
  • 工信部 加强网站备案网站续费会计分录怎样做
  • 网站建设技术架构酒店加盟什么网站建设
  • 深圳著名设计网站wordpress淘宝主题
  • 个人网站备案信息百度小说排行榜第一名
  • html静态网站模板简单单页建筑人才网下载安装
  • 网站建设推广扬州南宁手机网站设计策划
  • 手机网站建设网站报价水务 网站建设
  • 公司网站建设费放什么科目网页设计尺寸怎么设计
  • 网站大图怎么做更吸引客户南京网站开发建设
  • 网站网络推广服务没有公司可以注册网站吗
  • 芜湖建设网站2手房产App网站开发
  • 制作网页前为什么要建立站点重庆整合营销网站建设
  • 自己做的网站什么时候可以赚钱百度推广优化方案
  • 做网站算 自由职业者wordpress 导入模板
  • 公司网站建设要注意的问题阿里巴巴国际站入驻
  • 用php做企业网站的可行性wordpress检查后门
  • 网页设计与网站建设区别温建设文件发布在哪个网站
  • 做网站样式模板wordpress 副标题怎么加分类
  • 时装网站建设的背景泰安网签数据