WRR defines an interface that implements weighted round robin.
type WRR interface { // Add adds an item with weight to the WRR set. Add must be only called // before any calls to Next. Add(item any, weight int64) // Next returns the next picked item. // // Next needs to be thread safe. Add may not be called after any call to // Next. Next() any }
func NewEDF() WRR
NewEDF creates Earliest Deadline First (EDF) (https://en.wikipedia.org/wiki/Earliest_deadline_first_scheduling) implementation for weighted round robin. Each pick from the schedule has the earliest deadline entry selected. Entries have deadlines set at current time + 1 / weight, providing weighted round robin behavior with O(log n) pick time.
func NewRandom() WRR
NewRandom creates a new WRR with random.