rcrowley / go-metrics

Go port of Coda Hale's Metrics library
Other
3.46k stars 494 forks source link

Add MultiEWMA to make Meter updates atomic #139

Closed cbranch closed 8 years ago

cbranch commented 8 years ago

Instead of having three separate EWMA instances, use a MultiEWMA that updates all moving-average rates simultaneously using a single event counter. Locking is not required to update the three rates.

We can remove the lock in StandardMeter with the only change in behaviour that the (*StandardMeter).Mark function no longer increments StandardMeter.count and MultiEWMA.uncounted atomically with respect to each other. This only matters when ticking the meter every 5 seconds, where goroutines that called Mark before the 5-second tick may appear to have called it after the tick instead. The benefit is that we avoid contention on frequently-used meters.