rate

package module
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 29, 2024 License: MIT Imports: 3 Imported by: 1

README

build coverage goreport Docs

An efficient rate limiter for Go

Because too much of the CPU consumed was golang.org/x/time/rate.Limiter.Wait() calling time.Now().

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewSubTicker added in v1.1.0

func NewSubTicker(parent <-chan struct{}, maxrate *int32, counter *uint64) <-chan struct{}

NewSubTicker returns a channel that reads from another struct{}{} channel and then sends a `struct{}{}` at most `*maxrate` times per second, but that cannot exceed the parent tick rate.

If counter is not nil, it is incremented every time a send is successful.

Use this to make "background" tickers that are less prioritized.

The channel is closed when the parent channel is closed.

func NewTicker

func NewTicker(ctx context.Context, maxrate *int32, counter *uint64) <-chan struct{}

NewTicker returns a channel that sends a `struct{}{}` at most `*maxrate` times per second.

If counter is not nil, it is incremented every time a send is successful.

A nil `maxrate` or a `*maxrate` of zero or less sends as quickly as possible.

The channel is closed when the context is done.

Types

type Limiter

type Limiter struct {
	// contains filtered or unexported fields
}

Limiter provides efficient rate limiting. The zero value is immediately usable.

A Limiter is not safe to use from multiple goroutines simultaneously.

func (*Limiter) Wait

func (rl *Limiter) Wait(maxrate *int32) (slept time.Duration)

Wait sleeps at least long enough to ensure that Wait cannot be called more than `*maxrate` times per second.

Returns the duration slept.

A nil `maxrate` or a `*maxrate` of zero or less doesn't wait at all.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL