并发编程--Disruptor框架

Disruptor它是一个开源的并发框架,并获得2011 Duke’s 程序框架创新奖,能够在无锁的情况下实现网络的Queue并发操作;它是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式的实现,或者事件监听模式的实现;它是基于使用CAS机制实现的。


CAS:Compare And Swap/Set 顾名思义比较和交换
CPU级别的指令,cpu去更新一个值,但如果跟新过程中值发生了变化,操作就失败,然后重试,直到更新成功!
Disruptor的sequence的自增就是CAS的自旋自增,对应的,ArrayBlockQueue的数组索引index是互斥自增!

乐观锁设计思想:假设没有冲突

并发编程--Disruptor框架_第1张图片

设计方案

disruptor设计理念很超前,解决了传统队列的痛点
1、false-sharding:CPU伪共享问题
2、无锁编程的极致体验-CAS
3、两个独立的线程之间高效交换数据 


Disruptor通过以下设计来解决队列速度慢的问题:
环形数组结构
为了避免垃圾回收,采用数组而非链表。同时,数组对处理器的缓存机制更加友好。

  • 首尾相接的环形数组

     

    并发编程--Disruptor框架_第2张图片

     

    数组长度2^n,通过位运算,加快定位的速度。下标采取递增的形式。不用担心index溢出的问题。index是long类型,即使100万QPS的处理速度,也需要30万年才能用完。

  • 环持续向 buffer 中写入数据,这个序号会一直增长,直到绕过整个环

  • 环形数组结构

     

    并发编程--Disruptor框架_第3张图片

  • 新产生的sequence只覆盖,相对于传统队列不需要频繁GC

 

你可能感兴趣的:(系统分析,系统架构)