Skip to content

Latest commit

 

History

History
84 lines (66 loc) · 1.64 KB

README.md

File metadata and controls

84 lines (66 loc) · 1.64 KB

Throttle

test workflow Go Report Card Coverage Status

Throttle is an object that will perform exactly one action per duration. Do call the function f if a specified duration has passed since the last function f was called for this instance of Throttle.

Group 38 (1)

Examples

single thread

package main

import (
	"fmt"
	"time"

	"github.com/yudppp/throttle"
)

func main() {
	throttler := throttle.New(time.Second)
	throttler.Do(func() {
		fmt.Println("first call")
	})
	throttler.Do(func() {
		// this function called never.
		fmt.Println("second call")
	})
	time.Sleep(time.Second)
	throttler.Do(func() {
		fmt.Println("third call")
	})
	time.Sleep(time.Second)
}
$ go run -race main.go
first call
third call

multiple threads

package main

import (
	"fmt"
	"time"

	"github.com/yudppp/throttle"
)

func main() {
	throttler := throttle.New(time.Second)
	var wg sync.WaitGroup
	for i := 0; i < 64; i++ {
		wg.Add(1)
		go func(i int) {
			throttler.Do(func() {
				fmt.Println("called")
			})
			wg.Done()
		}(i)
	}
	wg.Wait()
}
$ go run -race main.go
called

License

The MIT License (MIT)