适用场景:
适用于协程复用
场景项目地址:
https://github.com/panjf2000/ants/blob/master/README_ZH.md
用法:
不带参数的函数:
package main import ( "fmt" "github.com/panjf2000/ants/v2" "sync" ) func main() { count := 10 var wg sync.WaitGroup defer ants.Release() // 创建自定义函数 task := func() { // todo: 业务逻辑处理部分 fmt.Println("hello world") wg.Done() } // 调用函数 for i := 0; i < count; i++ { wg.Add(1) _ = ants.Submit(task) } wg.Wait() // 获取正在运行的协程数量 fmt.Printf("running goroutines: %d\n", ants.Running()) }
带参数的函数:
package main import ( "fmt" "github.com/panjf2000/ants/v2" "sync" "sync/atomic" ) func main() { count := 10 var wg sync.WaitGroup // 创建自定义函数 var sum int32 pool, _ := ants.NewPoolWithFunc(10, func(i interface{}) { // todo: 业务逻辑处理部分 n := i.(int32) atomic.AddInt32(&sum, n) fmt.Printf("run with %d\n", n) wg.Done() }) // 释放协程池 defer pool.Release() // 调用函数 for i := 0; i < count; i++ { wg.Add(1) _ = pool.Invoke(int32(i)) } wg.Wait() // 获取正在运行的协程数量 fmt.Printf("running goroutines: %d\n", pool.Running()) }
文档更新时间: 2024-04-19 15:11 作者:lee