JCTools Mpsc源码详解(一)

Jctools:高性能Java并发数据结构详解,
本文介绍了Jctools库,它提供了高性能的非阻塞Map和queue实现,通过lazyset、内存屏障和内存填充等技术优化了多线程性能。重点讲解了MpscArrayQueue和其变体的不同实现及其优化策略。

Jctools介绍--jctools是一个Java开源并发非阻塞数据结构实现,其中主要实现了非阻塞Map和非阻塞queue,旨在为Java提供高性能并发数据结构实现;

jctool的特点--为什么性能高:

  1. lazyset--putOrderedObject,使用loadload内存屏障,写不会立即可见
  2. 大量的位运算
  3. 伪共享-通过pad类实现内存填充,使得index的写和element的写不会相互影响
  4. 无锁--cas循环代替锁
  5. 循环数组,避免了频繁GC和对象创建---对应的是内存回收和重分配

Jctools中的mpsc实现类即简单介绍--

  1. MpscArrayQueue
    1. 基于并发环形数据队列ConcurrentCircularArrayQueue的多生产者单消费者队列
    2. 该实现使用快速流方法从队列中进行轮询(进行微小更改以正确发布索引),
    3. 并在producer端扩展了Leslie Lamport并发队列算法(由Martin Thompson提出)。
    4. 只扩容一次,扩容至初始大小的1.5倍
       
  2. MpscBlockingConsumerArrayQueue
    1. 这是消费者端BlockingQueue的部分实现,仅在BaseMpscLinkedArrayQueue中描述的机制之上,但在本例中,保留位用于阻塞而不是调整大小。
  3. MpscChunkedArrayQueue
    1. MPSC阵列队列,从初始容量开始,在初始大小的链接块中增长到maxCapacity。只有当当前区块已满并且元素在调整大小时没有被复制时,队列才会增长,相反,指向新区块的链接会存储在旧区块中,供消费者使用。
    2. 只扩容一次,可以理解为固定大小
  4. MpscCompoundQueue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值