3.75ns/op by requiring single writer to track their own sequence number.
diff --git a/example/main.go b/example/main.go
index 0fea047..3c97749 100644
--- a/example/main.go
+++ b/example/main.go
@@ -38,12 +38,8 @@
sequence := disruptor.InitialSequenceValue
writer := disruptor.NewWriter(written, upstream, BufferSize)
for sequence <= Iterations {
- sequence = writer.Reserve(Reservations)
-
- // for i := sequence + ReservationMask; i <= sequence; i++ {
- // ringBuffer[i&BufferMask] = i
- // }
-
+ sequence += Reservations
+ writer.Reserve(sequence)
ringBuffer[sequence&BufferMask] = sequence
writer.Commit(sequence)
}
diff --git a/writer.go b/writer.go
index da41bb2..4ed7dae 100644
--- a/writer.go
+++ b/writer.go
@@ -27,13 +27,10 @@
}
}
-func (this *Writer) Reserve(count int64) int64 {
- this.previous = this.previous + count
- for this.previous-this.capacity > this.gate {
+func (this *Writer) Reserve(next int64) {
+ for next-this.capacity > this.gate {
this.gate = this.upstream.Read(0)
}
-
- return this.previous
}
func (this *Writer) Commit(sequence int64) {
diff --git a/writer_test.go b/writer_test.go
index 0a2b278..bc0d8dc 100644
--- a/writer_test.go
+++ b/writer_test.go
@@ -11,7 +11,7 @@
b.ResetTimer()
for i := int64(0); i < iterations; i++ {
- writer.Reserve(1)
+ writer.Reserve(i)
read.sequence = i
}
}