Skip to content

Repository files navigation

Go语言的协程池 , 节省内存 , 减少GC压力

安装

go get github.com/letsfire/factory

用法

// 新建协程池 , 最大允许协程数20000和初始化数量8// 协程工人繁忙不够用的情况下 , 内部实现自动扩容// 扩容不会超过您指定的最大允许协程数量varmaster=factory.NewMaster(20000, 8)
// 新建第一条工作流水线varline1=master.AddLine("demo.line.1", func(argsinterface{}) {
// TODO 处理您的业务逻辑// fmt.Println(args...)
})
line1.SetPanicHandler(func(errinterface) {
// TODO 异常处理
});
// 新建第二条工作流水线varline2=master.AddLine("demo.line.2", func(argsinterface{}) {
// TODO 处理您的业务逻辑// fmt.Println(args...)
})
// 根据业务场景将参数提交fori:=0; i<100000; i++ {
line1.Submit(i)
}
line1.Wait() // 等待流水线全部执行完毕forj:=0; j<100000; j++ {
line2.Submit(j)
}
// 协程池数量可动态调整master.Running() // 正在运行的协程工人数量master.AdjustSize(100) // 指定数量进行扩容或缩容master.Shutdown() // 等于 master.AdjustSize(0)

Benchmark

测试代码 , 增加 runTimes 参数原始的 Goroutine 会出现崩溃 , 使用 Factory 的表现稳定

基准测试_1

基准测试_2

About

Go语言的协程池 , 节省内存 , 减少GC压力

Topics

Resources

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages