- 博客(8)
- 资源 (12)
- 收藏
- 关注
原创 深入理解Disruptor
Disruptor是LMAX公司开源的一个高效的内存无锁队列,一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式实现,或者事件-监听模式的实现,直接称disruptor模式。disruptor最大特点是高性能,其LMAX架构可以获得每秒6百万订单,用1微秒的延迟获得吞吐量为100K+。理解Disruptor的原理,可以帮助我们更好的理解内存无锁,CAS,volatile,缓冲行等并发原理。 本文主要从以下方面介绍disruptor:1、Disruptor概念
2021-10-28 12:17:39 217
原创 Disruptor(六)性能比较
上一章 DSL相关实战,本文为了直观地感受 Disruptor 有多快,设计了一个性能对比测试:Producer 发布 100 万次事件,从发布第一个事件开始计时,捕捉 Consumer 处理完所有事件的耗时。测试用例在 Producer 如何将事件通知到 Consumer 的实现方式上,设计了三种不同的实现:Producer 的事件发布和 Consumer 的事件处理都在同一个线程,Producer 发布事件后立即触发 Consumer 的事件处理;Producer 的事件发布和 Consumer
2021-10-28 12:14:38 393
原创 Disruptor(五)DSL相关实战
上一章 主要介绍了多个生产者如何向RingBuffer数据写入数据,本文主要讲解使用Disruptor的DSL演示生产者和消费者的数据交换,和以往的线程间通信不同,disruptor使用消息传递的方式,通过RingBuffer进行线程间的数据传递和通信,下面分别从一对一和多对一的模型进行讲解。下面主要通过计算区间[0 , 100000000)中的所有数值相加为例子讲解Disruptor中的dsl使用。1、一对一一个生产者和一个消费者之间进行数据传递,使用disruptor主要涉及到RingBuffer
2021-10-28 12:06:11 363
原创 Disruptor(四)RingBuffer多生产者写入
上一章主要介绍了单个生产者如何向RingBuffer数据写入数据,如何不要让Ring重叠,写入后通知消费者,生产者一端的批处理,以及多个生产者如何协同工作,本章主要介绍多生产者向RingBuffer数据写入数据。1、多生产者MultiProducerSequencer申请下一个节点和单生产者不同的是在next方法中会直接通过cursor.compareAndSet(current, next)设置生产者的游标cursor的sequence。大家很可能会问设置了生产者的游标后,没有提交数据之前,多生产者
2021-10-28 12:00:27 973
原创 Disruptor(三)RingBuffer单生产者写入
上一章主要介绍了消费者从RingBuffer读取数据,本章主要介绍单个生产者如何向RingBuffer数据写入数据。在RingBuffer数据写入过程中如何不要让Ring重叠,写入后通知消费者,生产者一端的批处理,以及多个生产者如何协同工作。在RingBuffer写入数据的过程涉及到两阶段提交(two-phasecommit)1)生产者需要申请buffer里的下一个节点。2)当生产者向节点写完数据,需要调用调用publish发布数据。1、单个生产者SingleProducerSequencer数据写
2021-10-28 11:36:01 619
原创 Disruptor(二)RingBuffer读取
上一章主要介绍Ring Buffer的数据结构,本章主要讲解如何使用Disruptor从Ring Buffer中读取数据。1、消费者通过ProcessingSequenceBarrier读取数据能够读取数据的前提是数据已经写入到Ring Buffer中,关于数据的写入,后面一章节会详细讲解。RingBuffer的元素的大小是2的n次方(上面ringBufferSize为8,从序号0开始)。消费者(Consumer)是一个想从RingBuffer里读取数据的线程,它可以通过访问ProcessingSe
2021-10-28 11:31:43 694
原创 Disruptor(一)Disruptor概念和RingBuffer数据结构
Disruptor是LMAX公司开源的一个高效的内存无锁队列。谈到并发程序设计,有几个概念是避免不了的。1、锁: 锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。用户态的锁虽然避免了这些问题,但是其实它们只是在没有真实的竞争时才有效。2、CAS: CAS的涵义不多介绍了。使用CAS时不像上锁那样需要一次上下文切换,但是也需要处理器锁住它的指令流水
2021-10-28 11:31:13 686
原创 IntelliJ IDEA 代码格式化,快捷键
IntelliJ IDEA 代码格式化,快捷键 【常规】【调试部分、编译】【重构】【查找】【VCS】【it代码块】一键格式化代碼: Ctrl+Alt+L全局搜索替换:ctrl+shift+r强大的搜索功能,shift+shift (无论您想要搜啥都能找到)ctrl+shift+R==搜索类 CTRL+N:按照类名搜索类【常规】Ctrl+Shift + Enter,语句完成|Alt+Enter 代码提示完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shi
2021-10-08 18:17:45 2603
蚂蚁金服 P6 面试分享.txt
2021-08-20
面试谈薪资的技巧与准则(求职必备).docx
2021-08-20
VideoDownloader.rar
2021-08-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人