Golang协程池ants使用笔记
package main
import (
"fmt"
"sync"
"sync/atomic"
"time"
"github.com/panjjo/ants/v1"
)
var sum int32
func myFunc(i interface{}) {
n := i.(int32)
atomic.AddInt32(&sum, n)
time.Sleep(10 * time.Millisecond)
}
func demoPool() {
// 创建一个具有指定大小的协程池
p, _ := ants.NewPool(10)
// 初始化一个等待组,用于等待所有协程任务完成
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
// 将任务提交给协程池执行
_ = p.Submit(func() {
myFunc(int32(10))
wg.Done()
})
}
// 等待所有任务完成
wg.Wait()
fmt.Printf("running goroutines: %d\n", p.Running())
fmt.Printf("ants pool size: %d\n", cap(p.FreePool()))
fmt.Printf("sum: %d\n", sum)
// 清理资源
p.Release()
}
func main() {
demoPool()
}
这段代码演示了如何使用ants库创建一个具有特定大小的协程池,并向其提交任务。任务函数myFunc
执行一个简单的计算,并在一个原子操作中增加全局变量sum
的值。使用sync.WaitGroup
等待所有任务完成,并在最后释放池资源。这是一个典型的使用ants协程池的场景。
评论已关闭