高性能Go协程库ants实战指南(二)
在高性能Go协程库ants实战指南(一)文章中已经介绍了ants的基本操作,下面介绍ants提供的NewPoolWithFunc方法,NewPoolWithFunc
用于创建预定义任务函数的协程池,适用于批量处理相同逻辑的并发任务。
一、NewPoolWithFunc
基本用法
通过NewPoolWithFunc
方法可以创建指定容量的池并设置任务处理函数,返回的PoolWithFunc
对象需要手动释放资源,通过Release方法释放资源。代码示例如下:
func main() {pool, _ := ants.NewPoolWithFunc(10, func(i interface{}) {fmt.Printf("方法处理 %v\n", i)})defer pool.Release()
}
第一参数为池的容量,第二个参数为任务处理函数。
二、任务提交
通过Invoke方法提交参数,这些参数将被传递给预先定义的函数。代码示例如下:
for i := 0; i < 20; i++ {_ = pool.Invoke(i)
}
三、调整协程池容量
通过调用 Tune()调整协程池容量。代码示例如下:
// 调整协程池容量
pool.Tune(20)
四、完成示例
向协程池中提交任务,传入参数,代码示例:
func main() {var wg sync.WaitGrouppool, _ := ants.NewPoolWithFunc(5, func(i interface{}) {defer wg.Done()fmt.Printf("处理: %v\n", i)})defer pool.Release()for i := 0; i < 20; i++ {wg.Add(1)_ = pool.Invoke(i)}wg.Wait()
}
运行结果如下: