C# Class Disruptor.MultiProducerSequencer

Coordinator for claiming sequences for access to a data structure while tracking dependent Sequences. Suitable for use for sequencing across multiple publisher threads.

Note on Sequencer.Cursor: With this sequencer the cursor value is updated after the call to Sequencer.Next(), to determine the highest available sequence that can be read, then GetHighestPublishedSequence should be used.
Inheritance: Disruptor.Sequencer
Afficher le fichier Open project: disruptor-net/Disruptor-net Class Usage Examples

Méthodes publiques

Méthode Description
Claim ( long sequence ) : void

Claim a specific sequence when only one publisher is involved.

GetHighestPublishedSequence ( long lowerBound, long availableSequence ) : long

Get the highest sequence number that can be safely read from the ring buffer. Depending on the implementation of the Sequencer this call may need to scan a number of values in the Sequencer. The scan will range from nextSequence to availableSequence. If there are no available values >= nextSequence the return value will be nextSequence - 1. To work correctly a consumer should pass a value that it 1 higher than the last sequence that was successfully processed.

GetRemainingCapacity ( ) : long

Get the remaining capacity for this sequencer. return The number of slots remaining.

HasAvailableCapacity ( int requiredCapacity ) : bool

Has the buffer got capacity to allocate another sequence. This is a concurrent method so the response should only be taken as an indication of available capacity.

IsAvailable ( long sequence ) : bool

Confirms if a sequence is published and the event is available for use; non-blocking.

MultiProducerSequencer ( int bufferSize, IWaitStrategy waitStrategy ) : System
Next ( ) : long

Claim the next event in sequence for publishing.

Next ( int n ) : long

Claim the next n events in sequence for publishing. This is for batch event producing. Using batch producing requires a little care and some math. int n = 10; long hi = sequencer.next(n); long lo = hi - (n - 1); for (long sequence = lo; sequence <= hi; sequence++) { // Do work. } sequencer.publish(lo, hi);

Publish ( long sequence ) : void

Publish an event and make it visible to IEventProcessors

Publish ( long lo, long hi ) : void

Publish an event and make it visible to IEventProcessors

TryNext ( ) : long

Attempt to claim the next event in sequence for publishing. Will return the number of the slot if there is at leastrequiredCapacity slots available.

TryNext ( int n ) : long

Attempt to claim the next event in sequence for publishing. Will return the number of the slot if there is at least slots available.

Private Methods

Méthode Description
CalculateAvailabilityFlag ( long sequence ) : int
CalculateIndex ( long sequence ) : int
HasAvailableCapacity ( ISequence gatingSequences, int requiredCapacity, long cursorValue ) : bool
InitialiseAvailableBuffer ( ) : void
SetAvailable ( long sequence ) : void
SetAvailableBufferValue ( int index, int flag ) : void

Method Details

Claim() public méthode

Claim a specific sequence when only one publisher is involved.
public Claim ( long sequence ) : void
sequence long sequence to be claimed.
Résultat void

GetHighestPublishedSequence() public méthode

Get the highest sequence number that can be safely read from the ring buffer. Depending on the implementation of the Sequencer this call may need to scan a number of values in the Sequencer. The scan will range from nextSequence to availableSequence. If there are no available values &gt;= nextSequence the return value will be nextSequence - 1. To work correctly a consumer should pass a value that it 1 higher than the last sequence that was successfully processed.
public GetHighestPublishedSequence ( long lowerBound, long availableSequence ) : long
lowerBound long
availableSequence long The sequence to scan to.
Résultat long

GetRemainingCapacity() public méthode

Get the remaining capacity for this sequencer. return The number of slots remaining.
public GetRemainingCapacity ( ) : long
Résultat long

HasAvailableCapacity() public méthode

Has the buffer got capacity to allocate another sequence. This is a concurrent method so the response should only be taken as an indication of available capacity.
public HasAvailableCapacity ( int requiredCapacity ) : bool
requiredCapacity int requiredCapacity in the buffer
Résultat bool

IsAvailable() public méthode

Confirms if a sequence is published and the event is available for use; non-blocking.
public IsAvailable ( long sequence ) : bool
sequence long sequence of the buffer to check
Résultat bool

MultiProducerSequencer() public méthode

public MultiProducerSequencer ( int bufferSize, IWaitStrategy waitStrategy ) : System
bufferSize int
waitStrategy IWaitStrategy
Résultat System

Next() public méthode

Claim the next event in sequence for publishing.
public Next ( ) : long
Résultat long

Next() public méthode

Claim the next n events in sequence for publishing. This is for batch event producing. Using batch producing requires a little care and some math. int n = 10; long hi = sequencer.next(n); long lo = hi - (n - 1); for (long sequence = lo; sequence <= hi; sequence++) { // Do work. } sequencer.publish(lo, hi);
public Next ( int n ) : long
n int the number of sequences to claim
Résultat long

Publish() public méthode

Publish an event and make it visible to IEventProcessors
public Publish ( long sequence ) : void
sequence long sequence to be published
Résultat void

Publish() public méthode

Publish an event and make it visible to IEventProcessors
public Publish ( long lo, long hi ) : void
lo long
hi long
Résultat void

TryNext() public méthode

Attempt to claim the next event in sequence for publishing. Will return the number of the slot if there is at leastrequiredCapacity slots available.
public TryNext ( ) : long
Résultat long

TryNext() public méthode

Attempt to claim the next event in sequence for publishing. Will return the number of the slot if there is at least slots available.
public TryNext ( int n ) : long
n int the number of sequences to claim
Résultat long