Publishing a single item (but with the capability to publish multiple) at 5.29ns per operation.
diff --git a/example/main.go b/example/main.go
index 4e6ea20..3c6a593 100644
--- a/example/main.go
+++ b/example/main.go
@@ -30,13 +30,20 @@
fmt.Println(Iterations, finished.Sub(started))
}
-// TODO: experiment with: sequence, gate = writer.Reserve(sequence, gate)
+const Reservations = 1
+const ReservationMask = -Reservations + 1
+
func publish(written *disruptor.Cursor, upstream disruptor.Barrier) {
sequence := disruptor.InitialSequenceValue
writer := disruptor.NewWriter(written, upstream, BufferSize)
for sequence <= Iterations {
- sequence = writer.Reserve(1)
- ringBuffer[sequence&BufferMask] = sequence
+ sequence = writer.Reserve(Reservations)
+
+ for i := sequence + ReservationMask; i <= sequence; i++ {
+ ringBuffer[i&BufferMask] = i
+ }
+
+ // ringBuffer[sequence&BufferMask] = sequence
writer.Commit(sequence)
}
}