Jctools介绍--jctools是一个Java开源并发非阻塞数据结构实现,其中主要实现了非阻塞Map和非阻塞queue,旨在为Java提供高性能并发数据结构实现;
jctool的特点--为什么性能高:
- lazyset--putOrderedObject,使用loadload内存屏障,写不会立即可见
- 大量的位运算
- 伪共享-通过pad类实现内存填充,使得index的写和element的写不会相互影响
- 无锁--cas循环代替锁
- 循环数组,避免了频繁GC和对象创建---对应的是内存回收和重分配
Jctools中的mpsc实现类即简单介绍--
- MpscArrayQueue
- 基于并发环形数据队列ConcurrentCircularArrayQueue的多生产者单消费者队列
- 该实现使用快速流方法从队列中进行轮询(进行微小更改以正确发布索引),
- 并在producer端扩展了Leslie Lamport并发队列算法(由Martin Thompson提出)。
- 只扩容一次,扩容至初始大小的1.5倍
- MpscBlockingConsumerArrayQueue
- 这是消费者端BlockingQueue的部分实现,仅在BaseMpscLinkedArrayQueue中描述的机制之上,但在本例中,保留位用于阻塞而不是调整大小。
- MpscChunkedArrayQueue
- MPSC阵列队列,从初始容量开始,在初始大小的链接块中增长到maxCapacity。只有当当前区块已满并且元素在调整大小时没有被复制时,队列才会增长,相反,指向新区块的链接会存储在旧区块中,供消费者使用。
- 只扩容一次,可以理解为固定大小
- MpscCompoundQueue
Jctools:高性能Java并发数据结构详解,

本文介绍了Jctools库,它提供了高性能的非阻塞Map和queue实现,通过lazyset、内存屏障和内存填充等技术优化了多线程性能。重点讲解了MpscArrayQueue和其变体的不同实现及其优化策略。
最低0.47元/天 解锁文章
305

被折叠的 条评论
为什么被折叠?



