Using simplified wireup.
diff --git a/example/main.go b/example/main.go
index d375917..53f6ad9 100644
--- a/example/main.go
+++ b/example/main.go
@@ -9,72 +9,52 @@
)
const (
- BufferSize = 1024 * 64
- BufferMask = BufferSize - 1
- Iterations = 1000000 * 100
+ BufferSize = 1024 * 64
+ BufferMask = BufferSize - 1
+ Iterations = 1000000 * 100
+ Reservations = 1
)
-var ringBuffer = [BufferSize]int64{}
+var ring = [BufferSize]int64{}
func main() {
runtime.GOMAXPROCS(2)
- written, read := disruptor.NewCursor(), disruptor.NewCursor()
- reader := disruptor.NewReader(read, written, written, SampleConsumer{})
+ controller := disruptor.Configure(BufferSize, SampleConsumer{}).Build()
+ controller.Start()
started := time.Now()
- reader.Start()
- publish(written, read)
- reader.Stop()
+ publish(controller.Writer())
finished := time.Now()
+
+ controller.Stop()
fmt.Println(Iterations, finished.Sub(started))
}
-const Reservations = 1
-
-func publish(written *disruptor.Cursor, upstream disruptor.Barrier) {
+func publish(writer *disruptor.Writer) {
sequence := disruptor.InitialSequenceValue
- writer := disruptor.NewWriter(written, upstream, BufferSize)
for sequence <= Iterations {
- sequence += Reservations
- writer.Await(sequence)
- ringBuffer[sequence&BufferMask] = sequence
+ sequence = writer.Reserve(Reservations)
+ ring[sequence&BufferMask] = sequence
writer.Commit(sequence, sequence)
}
}
-// func publish(written *disruptor.Cursor, upstream disruptor.Barrier) {
+// func publish(writer *disruptor.Writer) {
// sequence := disruptor.InitialSequenceValue
-// writer := disruptor.NewWriter(written, upstream, BufferSize)
// for sequence <= Iterations {
-// sequence = writer.Reserve(Reservations)
-// ringBuffer[sequence&BufferMask] = sequence
+// sequence += Reservations
+// writer.Await(sequence)
+// ring[sequence&BufferMask] = sequence
// writer.Commit(sequence, sequence)
// }
// }
-// func publish(written *disruptor.Cursor, upstream disruptor.Barrier) {
-// previous := disruptor.InitialSequenceValue
-// gate := disruptor.InitialSequenceValue
-
-// for previous <= Iterations {
-// next := previous + 1
-
-// for next-BufferSize > gate {
-// gate = upstream.Read(next)
-// }
-
-// ringBuffer[next&BufferMask] = next
-// written.Store(next)
-// previous = next
-// }
-// }
-
type SampleConsumer struct{}
func (this SampleConsumer) Consume(lower, upper int64) {
for lower <= upper {
- message := ringBuffer[lower&BufferMask]
+ message := ring[lower&BufferMask]
if message != lower {
fmt.Println("Race condition", message, lower)
panic("Race condition")