[氙-Xe] Go协程并发复用,降低CPU和内存负载
- 实现简单
- 性能优异
- 采用「生产-消费」模式
- 任务支持
context - 支持任务缓存队列,缓存达上限会阻塞等待
- 基于官方版本实现的
errgroup,支持协程数量控制 - 支持分层时间轮(任务执行支持「一次」或「多次重试」)
go get -u github.com/noble-gase/xegoos: darwin
goarch: arm64
cpu: Apple M4func main() {
ctx := context.Background()
pool := woker.New(5000)
for i := 0; i < 100000000; i++ {
i := i
pool.Go(ctx, func(ctx context.Context) {
time.Sleep(time.Second)
fmt.Println("Index:", i)
})
}
<-ctx.Done()
}func main() {
ctx := context.Background()
pool := woker.New(5000)
for i := 0; i < 100; i++ {
i := i
pool.Go(ctx, func(ctx context.Context) {
for j := 0; j < 1000000; j++ {
j := j
pool.Go(ctx, func(ctx context.Context) {
time.Sleep(time.Second)
fmt.Println("Index:", i, "-", j)
})
}
})
}
<-ctx.Done()
}