batch only, give each thread its own ring buffer.

around 2x improvement, at ~6.5x speedup on 8 hyperthreads

no longer reentrant