Moved channel and disruptor benchmarks into separate directories.
diff --git a/benchmarks/blocking_channel_test.go b/benchmark-channels/blocking_channel_test.go
similarity index 100%
rename from benchmarks/blocking_channel_test.go
rename to benchmark-channels/blocking_channel_test.go
diff --git a/benchmarks/non_blocking_channel_test.go b/benchmark-channels/non_blocking_channel_test.go
similarity index 100%
rename from benchmarks/non_blocking_channel_test.go
rename to benchmark-channels/non_blocking_channel_test.go
diff --git a/benchmark-disruptor/init_test.go b/benchmark-disruptor/init_test.go
new file mode 100644
index 0000000..8d4945b
--- /dev/null
+++ b/benchmark-disruptor/init_test.go
@@ -0,0 +1,15 @@
+package benchmarks
+
+import "runtime"
+
+const (
+ RingBufferSize = 1024 * 64
+ RingBufferMask = RingBufferSize - 1
+ ReserveOne = 1
+ ReserveMany = 16
+ ReserveManyDelta = ReserveMany - 1
+)
+
+func init() {
+ runtime.GOMAXPROCS(2)
+}
diff --git a/benchmark-disruptor/single_writer_test.go b/benchmark-disruptor/single_writer_test.go
new file mode 100644
index 0000000..9213392
--- /dev/null
+++ b/benchmark-disruptor/single_writer_test.go
@@ -0,0 +1,67 @@
+package benchmarks
+
+import (
+ "fmt"
+ "testing"
+
+ "github.com/smartystreets/go-disruptor"
+)
+
+func BenchmarkDisruptorWriterReserveSingle(b *testing.B) {
+ ringBuffer := [RingBufferSize]int64{}
+ written, read := disruptor.NewCursor(), disruptor.NewCursor()
+ reader := disruptor.NewReader(read, written, written, Consumer{&ringBuffer})
+ writer := disruptor.NewWriter(written, read, RingBufferSize)
+ reader.Start()
+
+ iterations := int64(b.N)
+ b.ReportAllocs()
+ b.ResetTimer()
+
+ sequence := disruptor.InitialSequenceValue
+ for sequence < iterations {
+ sequence = writer.Reserve(ReserveOne)
+ ringBuffer[sequence&RingBufferMask] = sequence
+ writer.Commit(sequence, sequence)
+ }
+
+ reader.Stop()
+}
+func BenchmarkDisruptorWriterReserveMultiple(b *testing.B) {
+ ringBuffer := [RingBufferSize]int64{}
+ written, read := disruptor.NewCursor(), disruptor.NewCursor()
+ reader := disruptor.NewReader(read, written, written, Consumer{&ringBuffer})
+ writer := disruptor.NewWriter(written, read, RingBufferSize)
+ reader.Start()
+
+ iterations := int64(b.N)
+ b.ReportAllocs()
+ b.ResetTimer()
+
+ sequence := disruptor.InitialSequenceValue
+ for sequence < iterations {
+ sequence = writer.Reserve(ReserveMany)
+
+ for i := sequence - ReserveManyDelta; i <= sequence; i++ {
+ ringBuffer[i&RingBufferMask] = i
+ }
+
+ writer.Commit(sequence, sequence)
+ }
+
+ reader.Stop()
+}
+
+type Consumer struct {
+ ringBuffer *[RingBufferSize]int64
+}
+
+func (this Consumer) Consume(lower, upper int64) {
+ for lower <= upper {
+ message := this.ringBuffer[lower&RingBufferMask]
+ if message != lower {
+ panic(fmt.Sprintf("\nRace condition %d %d\n", lower, message))
+ }
+ lower++
+ }
+}
diff --git a/benchmarks/single_writer_test.go b/benchmarks/single_writer_test.go
deleted file mode 100644
index 9e5eb42..0000000
--- a/benchmarks/single_writer_test.go
+++ /dev/null
@@ -1,80 +0,0 @@
-package benchmarks
-
-import (
- "fmt"
- "runtime"
- "testing"
-
- "github.com/smartystreets/go-disruptor"
-)
-
-const (
- singleWriterRingBufferSize = 1024 * 64
- singleWriterRingBufferMask = singleWriterRingBufferSize - 1
- reserveOne = 1
- reserveMany = 16
- reserveManyDelta = reserveMany - 1
-)
-
-func BenchmarkDisruptorWriterReserveSingle(b *testing.B) {
- ringBuffer := [singleWriterRingBufferSize]int64{}
- written, read := disruptor.NewCursor(), disruptor.NewCursor()
- reader := disruptor.NewReader(read, written, written, singleWriterConsumer{&ringBuffer})
- writer := disruptor.NewWriter(written, read, singleWriterRingBufferSize)
- reader.Start()
-
- iterations := int64(b.N)
- b.ReportAllocs()
- b.ResetTimer()
-
- sequence := disruptor.InitialSequenceValue
- for sequence < iterations {
- sequence = writer.Reserve(reserveOne)
- ringBuffer[sequence&singleWriterRingBufferMask] = sequence
- writer.Commit(sequence, sequence)
- }
-
- reader.Stop()
-}
-func BenchmarkDisruptorWriterReserveMultiple(b *testing.B) {
- ringBuffer := [singleWriterRingBufferSize]int64{}
- written, read := disruptor.NewCursor(), disruptor.NewCursor()
- reader := disruptor.NewReader(read, written, written, singleWriterConsumer{&ringBuffer})
- writer := disruptor.NewWriter(written, read, singleWriterRingBufferSize)
- reader.Start()
-
- iterations := int64(b.N)
- b.ReportAllocs()
- b.ResetTimer()
-
- sequence := disruptor.InitialSequenceValue
- for sequence < iterations {
- sequence = writer.Reserve(reserveMany)
-
- for i := sequence - reserveManyDelta; i <= sequence; i++ {
- ringBuffer[i&singleWriterRingBufferMask] = i
- }
-
- writer.Commit(sequence, sequence)
- }
-
- reader.Stop()
-}
-
-type singleWriterConsumer struct {
- ringBuffer *[singleWriterRingBufferSize]int64
-}
-
-func (this singleWriterConsumer) Consume(lower, upper int64) {
- for lower <= upper {
- message := this.ringBuffer[lower&singleWriterRingBufferMask]
- if message != lower {
- panic(fmt.Sprintf("\nRace condition %d %d\n", lower, message))
- }
- lower++
- }
-}
-
-func init() {
- runtime.GOMAXPROCS(2)
-}