blob: 548df1acebde2edb3abba8c32eede56f83305198 [file] [log] [blame]
- The consumer code needs a much cleaner abstraction
In the end, it's two-phase, e.g. receive message, ack message, perhaps we make this a
first-class citizen in the API on the consumer side where the consumer calls:
Receive() and gets the sequence of the message in question (or a specific value for
gating/idling?) and then calls Ack/Confirm etc with the message sequence?
- Wireup DSL
- Rewrite all code test first (including diamond pattern)
- Benchmark code (go test -bench=.) (with GOMAXPROCS=2 if env GOMAXPROCS=1)
- Squeeze little bits of performance here and there by trying a few different things
e.g. pointers vs structs, padding, etc.
- Investigate ways to utilize an int32 under the hood but have it be exposed as an int64?
e.g. utilizing two int32s? This would allow us to remove the atomic statements surrounding
i386 and ARM architecutes, but may be more effort than it's worth for our particular
use case...
- Understand why "slower" consumer code is faster and more consistent when performing single-item
publishes
- I need to get some help doing some low-level profiling the application to find out where
the bottlenecks are and determining how the Go scheduler is hindering performance, if at all.
- More assertive tests on CPU ordering, e.g. claim a slot which has multiple values
perform a computation on the sequence in some deterministic way and store each computation
as one of the values. Then on the reader side assert that the struct values are correct
for that given sequence.
- Integration suite that can exercise the Disruptor code on:
1. Multiple Go runtime versions, e.g. (1.1, 1.2, 1.3, etc.) (plus point releases and the latest tip)
2. Multiple CPU architectures: ARM, i386, AMD64
3. Multiple operation systems: Linux, OSX, Windows, etc.
Ideally each of the above combinations would be an individual exercise
- contributors
- license
- readme (Github markdown?)
- Website with cool images and documentation? (e.g. GoConvey)