ConcurrentLinkedQueue
which is an unbounded multi-producer, multi-consumer queue which is further encumbered by the need to implement
the full range of Queue methods.See: Description
| Class | Description |
|---|---|
| ConcurrentCircularArrayQueue<E> |
A concurrent access enabling class used by circular array based queues this class exposes an offset computation
method along with differently memory fenced load/store methods into the underlying array.
|
| ConcurrentSequencedCircularArrayQueue<E> | |
| MpmcArrayQueue<E> |
A Multi-Producer-Multi-Consumer queue based on a
ConcurrentCircularArrayQueue. |
| MpscArrayQueue<E> |
A Multi-Producer-Single-Consumer queue based on a
ConcurrentCircularArrayQueue. |
| MpscCompoundQueue<E> | |
| MpscLinkedQueue7<E> | |
| MpscLinkedQueue8<E> | |
| MpscOnSpscQueue<E> | |
| QueueFactory |
The queue factory produces
Queue instances based on a best fit to the ConcurrentQueueSpec. |
| SpmcArrayQueue<E> | |
| SpscArrayQueue<E> |
A Single-Producer-Single-Consumer queue backed by a pre-allocated buffer.
|
| SpscLinkedQueue<E> |
This is a weakened version of the MPSC algorithm as presented on 1024
Cores by D.
|
ConcurrentLinkedQueue
which is an unbounded multi-producer, multi-consumer queue which is further encumbered by the need to implement
the full range of Queue methods. In this package we offer a range of implementations:
Limited Queue methods support:
The queues implement a subset of the Queue interface which is documented under the
MessagePassingQueue interface. In particular:
Collection.iterator() is not supported
Memory layout controls and False Sharing:
The classes in this package use what is considered at the moment the most reliable method of controlling
class field layout, namely inheritance. The method is described in this post which also
covers why other methods are currently suspect.
Note that we attempt to tackle both active (write/write) and passive(read/write) false sharing case:
Use of sun.misc.Unsafe:
A choice is made in this library to utilize sun.misc.Unsafe for performance reasons. In this package we have two
use cases:
AtomicLongFieldUpdater but choose not to.
AtomicReferenceArray but
the extra reference chase and redundant boundary checks are considered too high a price to pay at this time.
Copyright © 2013–2014. All rights reserved.