package main
import("fmt""time""github.com/xxjwxc/gowp/workerpool")funcmain(){
wp := workerpool.New(10)//设置最大线程数for i :=0; i <20; i++{//开启20个请求
ii := i
wp.Do(func()error{for j :=0; j <10; j++{//每次打印0-10的值
fmt.Println(fmt.Sprintf("%v->\t%v", ii, j))
time.Sleep(1* time.Second)}//time.Sleep(1 * time.Second)returnnil})}
wp.Wait()
fmt.Println("down")}
限流器(cache)
package main
import("fmt""sync""time""github.com/xxjwxc/gowp/limiter")funcmain(){
limiter := limiter.NewLimiter(limiter.WithLimit(10), limiter.WithNamespace("test"), limiter.WithTsTimeout(true)/*, limiter.WithRedis(res)*/)var wg sync.WaitGroup
for i :=0; i <20; i++{
wg.Add(1)gofunc(){defer wg.Done()
token,_:= limiter.Acquire(10)// 获取一个
fmt.Println(token)
time.Sleep(1* time.Second)
limiter.Release(token)// 回退}()}
wg.Wait()
fmt.Println("down")}
限流器(redis)
package main
import("fmt""sync""time""github.com/xxjwxc/gowp/limiter""github.com/xxjwxc/public/myredis")funcmain(){
conf := myredis.InitRedis(myredis.WithAddr("127.0.0.1:6379"), myredis.WithPwd("123456"), myredis.WithGroupName("test"))
res, err := myredis.NewRedis(conf)if err !=nil{
fmt.Println(err)return}
limiter := limiter.NewLimiter(limiter.WithRedis(res), limiter.WithLimit(10), limiter.WithNamespace("test")/*, limiter.WithRedis(res)*/)var wg sync.WaitGroup
for i :=0; i <20; i++{
wg.Add(1)gofunc(){defer wg.Done()
token,_:= limiter.Acquire(10)// 获取一个
fmt.Println(token)
time.Sleep(1* time.Second)
limiter.Release(token)// 回退}()}
wg.Wait()
fmt.Println("down")}