throttle.go
func NewThrottle(
	rateHz float64,
	capacity uint64) (t Throttle) {
	typed := &throttle{
		startTime: time.Now(),
		bucket:    NewTokenBucket(rateHz, capacity),
	}

	typed.mu = syncutil.NewInvariantMutex(typed.checkInvariants)

	t = typed
	return
}
func NewThrottle(
	rateHz float64,
	capacity uint64) (t Throttle) {
	typed := &throttle{
		startTime: time.Now(),
		bucket:    NewTokenBucket(rateHz, capacity),
	}

	typed.mu = syncutil.NewInvariantMutex(typed.checkInvariants)

	t = typed
	return
}
func NewThrottle ( rateHz float64 , capacity uint64 ) ( t Throttle ) { typed := & throttle { startTime : time . Now ( ) , bucket : NewTokenBucket ( rateHz , capacity ) , } typed . mu = syncutil . NewInvariantMutex ( typed . checkInvariants ) t = typed return }
// Create a throttle that uses time.Now to judge the time given to the
// underlying token bucket.
//
// Be aware of the monotonicity issues. In particular:
//
//  *  If the system clock jumps into the future, the throttle will let through
//     a burst of traffic.
//
//  *  If the system clock jumps into the past, it will halt all traffic for
//     a potentially very long amount of time.
//
Create a throttle that uses time . Now to judge the time given to the underlying token bucket . Be aware of the monotonicity issues . In particular : * If the system clock jumps into the future the throttle will let through a burst of traffic . * If the system clock jumps into the past it will halt all traffic for a potentially very long amount of time .