xenon-go

[氙-Xenon] Go协程并发复用,降低CPU和内存负载
安装
go get -u github.com/noble-gase/xenon
| 模块 |
说明 |
| errgroup |
控制协程数量并按需创建 |
| timewheel |
分层时间轮(任务支持重试) |
| worker |
基于 channel 实现的协程池 |
流程图

效果
goos: darwin
goarch: arm64
cpu: Apple M4
场景-1
import "github.com/noble-gase/xenon/worker"
func main() {
ctx := context.Background()
pool := worker.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()
}
cpu

mem

场景-2
import "github.com/noble-gase/xenon/worker"
func main() {
ctx := context.Background()
pool := worker.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()
}
cpu

mem
