Go 语言的 goroutine 池


英文 | 中文

📖 简介

ants

🚀 功能:

  • 自动调度海量的 goroutines,复用 goroutines
  • 定期清理过期的 goroutines,进一步节省资源
  • 提供了大量有用的接口:任务提交、获取运行中的 goroutine 数量、动态调整 Pool 大小、释放 Pool、重启 Pool
  • 优雅处理 panic,防止程序崩溃
  • 资源复用,极大节省内存使用量;在大规模批量并发任务场景下比原生 goroutine 并发具有更高的性能
  • 非阻塞机制
ants

流程图

ants-flowchart-cn

动态图

🧰 安装

ants
ants

🛠 使用

ants

Pool 配置

NewPoolNewPoolWithFuncants.Options

自定义池

antsNewPool

任务提交

ants.Submit(func())

动态调整 goroutine 池容量

Tune(int)

该方法是线程安全的。

预先分配 goroutine 队列内存

ants

释放 Pool

重启 Pool

⚙️ 关于任务执行顺序

antsants

🧲 Benchmarks

上图中的前两个 benchmark 测试结果是基于100w 任务量的条件,剩下的几个是基于 1000w 任务量的测试结果,`ants` 的默认池容量是 5w。
ants

Benchmarks with Pool

antsantsants

Benchmarks with PoolWithFunc

PoolWithFuncPoolantsantsantsants

吞吐量测试(适用于那种只管提交异步任务而无须关心结果的场景)

10w 任务量

100w 任务量

1000w 任务量

📊 性能小结

ants

👏 贡献者

ants

📄 证书

ants

🖥 用户案例

商业公司

ants

                

开源软件

所有案例:

ants

🔋 JetBrains 开源证书支持

ants

💰 支持

如果有意向,可以通过每个月定量的少许捐赠来支持这个项目。

💎 赞助

每月定量捐赠 10 刀即可成为本项目的赞助者,届时您的 logo 或者 link 可以展示在本项目的 README 上。

☕️ 打赏

当您通过以下方式进行捐赠时,请务必留下姓名、GitHub 账号或其他社交媒体账号,以便我将其添加到捐赠者名单中,以表谢意。

        

资助者

Patrick Othmer Jimmy ChenZhen Mai Yang 王开帅 Unger Alejandro Weng Wei

🔋 赞助商