Go第三方框架--ants协程池框架
package main
import (
"fmt"
"sync"
"sync/atomic"
"github.com/panjjo/ants/v1"
)
var sum int32
func myFunc(i interface{}) error {
n := i.(int32)
atomic.AddInt32(&sum, n)
return nil
}
func main() {
// 创建一个ants协程池
p, _ := ants.NewPool(2)
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
// 将任务提交给ants协程池处理
_ = p.Submit(func() {
myFunc(int32(100))
wg.Done()
})
}
wg.Wait() // 等待所有任务完成
fmt.Printf("running goroutines: %d\n", p.Running())
fmt.Printf("sum: %d\n", sum)
// 重置sum值
sum = 0
// 关闭ants协程池
p.Release()
}
这段代码创建了一个ants协程池,并向该池提交了10个任务。每个任务都执行了myFunc
函数,将一个固定的整数值原子性地加到sum
变量中。代码最后关闭了协程池,并打印出当前运行的协程数量和sum
的最终值。这个例子展示了如何使用ants库管理并发任务,以及如何处理原子操作。
评论已关闭