Split files; adding SharedWriter tests; updated readme benchmarks.
diff --git a/benchmark-disruptor/multi_writer_test.go b/benchmark-disruptor/multi_writer_test.go
new file mode 100644
index 0000000..a71a941
--- /dev/null
+++ b/benchmark-disruptor/multi_writer_test.go
@@ -0,0 +1,55 @@
+package benchmarks
+
+import (
+	"testing"
+
+	"github.com/smartystreets/go-disruptor"
+)
+
+func BenchmarkDisruptorSharedWriterReserveOne(b *testing.B) {
+	ringBuffer := [RingBufferSize]int64{}
+	written, read := disruptor.NewCursor(), disruptor.NewCursor()
+	shared := disruptor.NewSharedWriterBarrier(written, RingBufferSize)
+	reader := disruptor.NewReader(read, written, shared, SampleConsumer{&ringBuffer})
+	writer := disruptor.NewSharedWriter(shared, read)
+	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 BenchmarkDisruptorSharedWriterReserveMany(b *testing.B) {
+// 	ringBuffer := [RingBufferSize]int64{}
+// 	written, read := disruptor.NewCursor(), disruptor.NewCursor()
+// 	shared := disruptor.NewSharedWriterBarrier(written, RingBufferSize)
+// 	reader := disruptor.NewReader(read, written, shared, SampleConsumer{&ringBuffer})
+// 	writer := disruptor.NewSharedWriter(shared, read)
+// 	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-ReserveMany, sequence)
+// 	}
+
+// 	reader.Stop()
+// }
diff --git a/benchmark-disruptor/sample_consumer_test.go b/benchmark-disruptor/sample_consumer_test.go
new file mode 100644
index 0000000..15835b8
--- /dev/null
+++ b/benchmark-disruptor/sample_consumer_test.go
@@ -0,0 +1,17 @@
+package benchmarks
+
+import "fmt"
+
+type SampleConsumer struct {
+	ringBuffer *[RingBufferSize]int64
+}
+
+func (this SampleConsumer) 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/benchmark-disruptor/single_writer_await_test.go b/benchmark-disruptor/single_writer_await_test.go
new file mode 100644
index 0000000..d73b194
--- /dev/null
+++ b/benchmark-disruptor/single_writer_await_test.go
@@ -0,0 +1,54 @@
+package benchmarks
+
+import (
+	"testing"
+
+	"github.com/smartystreets/go-disruptor"
+)
+
+func BenchmarkDisruptorWriterAwaitOne(b *testing.B) {
+	ringBuffer := [RingBufferSize]int64{}
+	written, read := disruptor.NewCursor(), disruptor.NewCursor()
+	reader := disruptor.NewReader(read, written, written, SampleConsumer{&ringBuffer})
+	writer := disruptor.NewWriter(written, read, RingBufferSize)
+	reader.Start()
+
+	iterations := int64(b.N)
+	b.ReportAllocs()
+	b.ResetTimer()
+
+	sequence := disruptor.InitialSequenceValue
+	for sequence < iterations {
+		sequence += ReserveOne
+		writer.Await(sequence)
+		ringBuffer[sequence&RingBufferMask] = sequence
+		writer.Commit(sequence, sequence)
+	}
+
+	reader.Stop()
+}
+func BenchmarkDisruptorWriterAwaitMany(b *testing.B) {
+	ringBuffer := [RingBufferSize]int64{}
+	written, read := disruptor.NewCursor(), disruptor.NewCursor()
+	reader := disruptor.NewReader(read, written, written, SampleConsumer{&ringBuffer})
+	writer := disruptor.NewWriter(written, read, RingBufferSize)
+	reader.Start()
+
+	iterations := int64(b.N)
+	b.ReportAllocs()
+	b.ResetTimer()
+
+	sequence := disruptor.InitialSequenceValue
+	for sequence < iterations {
+		sequence += ReserveMany
+		writer.Await(sequence)
+
+		for i := sequence - ReserveManyDelta; i <= sequence; i++ {
+			ringBuffer[i&RingBufferMask] = i
+		}
+
+		writer.Commit(sequence, sequence)
+	}
+
+	reader.Stop()
+}
diff --git a/benchmark-disruptor/single_writer_test.go b/benchmark-disruptor/single_writer_reservation_test.go
similarity index 64%
rename from benchmark-disruptor/single_writer_test.go
rename to benchmark-disruptor/single_writer_reservation_test.go
index 9213392..2f23cd7 100644
--- a/benchmark-disruptor/single_writer_test.go
+++ b/benchmark-disruptor/single_writer_reservation_test.go
@@ -1,16 +1,15 @@
 package benchmarks
 
 import (
-	"fmt"
 	"testing"
 
 	"github.com/smartystreets/go-disruptor"
 )
 
-func BenchmarkDisruptorWriterReserveSingle(b *testing.B) {
+func BenchmarkDisruptorWriterReserveOne(b *testing.B) {
 	ringBuffer := [RingBufferSize]int64{}
 	written, read := disruptor.NewCursor(), disruptor.NewCursor()
-	reader := disruptor.NewReader(read, written, written, Consumer{&ringBuffer})
+	reader := disruptor.NewReader(read, written, written, SampleConsumer{&ringBuffer})
 	writer := disruptor.NewWriter(written, read, RingBufferSize)
 	reader.Start()
 
@@ -27,10 +26,10 @@
 
 	reader.Stop()
 }
-func BenchmarkDisruptorWriterReserveMultiple(b *testing.B) {
+func BenchmarkDisruptorWriterReserveMany(b *testing.B) {
 	ringBuffer := [RingBufferSize]int64{}
 	written, read := disruptor.NewCursor(), disruptor.NewCursor()
-	reader := disruptor.NewReader(read, written, written, Consumer{&ringBuffer})
+	reader := disruptor.NewReader(read, written, written, SampleConsumer{&ringBuffer})
 	writer := disruptor.NewWriter(written, read, RingBufferSize)
 	reader.Start()
 
@@ -51,17 +50,3 @@
 
 	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/readme.md b/readme.md
index d4186fb..b8b7294 100644
--- a/readme.md
+++ b/readme.md
@@ -16,12 +16,17 @@
 
 Scenario | Per Operation Time
 -------- | ------------------ 
-Channel: Non-blocking | 681 ns/op
-Channel: Blocking | 86.6 ns/op|
-Disruptor: SharedWriter (single claim)	| nn.n ns/op
-Disruptor: SharedWriter (multi claim)	| nn.n ns/op
-Disruptor: Writer (single claim) | 4.3 ns/op
-Disruptor: Writer (multi claim) | 1.1 ns/op
+Channel (GOMAXPROCS=2): Non-blocking | 681 ns/op
+Channel (GOMAXPROCS=2): Blocking | 86.6 ns/op
+
+Disruptor: SharedWriter (Reserve One)	| 15.4 ns/op
+Disruptor: SharedWriter (Reserve Many)	| nn.n ns/op
+
+Disruptor: Writer (Reserve One) | 4.3 ns/op
+Disruptor: Writer (Reserve Many) | 1.1 ns/op
+
+Disruptor: Writer (Await One) | 3.5 ns/op
+Disruptor: Writer (Await Many) | 1.0 ns/op
 
 
 When In Doubt, Use Channels