taskgroup
golang并发执行多任务,并聚合多任务结果。
使用文档
、 项目github
使用: go get github.com/mlee-msl/taskgroup
功能特点
- 并发安全的执行多个任务
- 将多个任务的结果进行聚合
- 通过扇出/扇入模式,结合线程安全
channel
实现高效协程间通信 - 多任务复用(共享)同一协程,避免了协程频繁创建或销毁的开销
early-return
,当出现必要成功的任务失败时,停止执行所有goroutine
后续的其他任务
对比errgroup
- errgroup 没有任务添加阶段,直接会使用协程执行指定的任务
可通过限制协程数量上限,控制并发量(指定
buffer size
的channel
实现),当协程数达到上限时,需要等待现有任务执行结束,然后开启新的协程,会增加协程创建或销毁的成本给errgroup项目提PR
- errgroup可支持带有取消Context的模式,但实际上,该种模式下仍需要所有执行任务的
goroutine
执行完毕(每一个任务都会有新的goroutine
)
关于
- 欢迎大家对
项目github
进行star
、fork
- 欢迎大家积极共建,提一切可能的
Issues
,进行PR(MR)