README_ZH.md
<b>Go 语言的 goroutine 池</b>
<a title="Build Status" target="_blank" href="https://github.com/panjf2000/ants/actions?query=workflow%3ATests"></a> <a title="Codecov" target="_blank" href="https://codecov.io/gh/panjf2000/ants"></a> <a title="Release" target="_blank" href="https://github.com/panjf2000/ants/releases"></a> <a title="Tag" target="_blank" href="https://github.com/panjf2000/ants/tags"></a>
<a title="Minimum Go Version" target="_blank" href="https://github.com/panjf2000/gnet"></a> <a title="Go Report Card" target="_blank" href="https://goreportcard.com/report/github.com/panjf2000/ants"></a> <a title="Doc for ants" target="_blank" href="https://pkg.go.dev/github.com/panjf2000/ants/v2?tab=doc"></a> <a title="Mentioned in Awesome Go" target="_blank" href="https://github.com/avelino/awesome-go#goroutines"></a>
</p>英文 | 中文
ants 是一个高性能的 goroutine 池,实现了对大规模 goroutine 的调度管理、goroutine 复用,允许使用者在开发并发程序的时候限制 goroutine 数量,复用资源,达到更高效执行任务的效果。
ants 是如何运行的ants v1 版本:go get -u github.com/panjf2000/ants
ants v2 版本 (开启 GO111MODULE=on):go get -u github.com/panjf2000/ants/v2
基本的使用请查看示例.
通过在调用 NewPool/NewPoolWithFunc/NewPoolWithFuncGeneric 之时使用各种 optional function,可以设置 ants.Options 中各个配置项的值,然后用它来定制化 goroutine pool。
更多细节请查看 ants.Options 和 ants.Option
ants 支持实例化使用者自己的一个 Pool,指定具体的 pool 容量;通过调用 NewPool 方法可以实例化一个新的带有指定容量的 Pool,如下:
p, _ := ants.NewPool(10000)
提交任务通过调用 ants.Submit 方法:
ants.Submit(func(){})
需要动态调整 pool 容量可以通过调用 ants.Tune:
pool.Tune(1000) // Tune its capacity to 1000
pool.Tune(100000) // Tune its capacity to 100000
该方法是线程安全的。
ants 支持预先为 pool 分配容量的内存, 这个功能可以在某些特定的场景下提高 goroutine 池的性能。比如, 有一个场景需要一个超大容量的池,而且每个 goroutine 里面的任务都是耗时任务,这种情况下,预先分配 goroutine 队列内存将会减少不必要的内存重新分配。
// 提前分配的 pool 容量的内存空间
p, _ := ants.NewPool(100000, ants.WithPreAlloc(true))
pool.Release()
或者
pool.ReleaseTimeout(time.Second * 3)
// 只要调用 Reboot() 方法,就可以重新激活一个之前已经被销毁掉的池,并且投入使用。
pool.Reboot()
ants 并不保证提交的任务被执行的顺序,执行的顺序也不是和提交的顺序保持一致,因为在 ants 是并发地处理所有提交的任务,提交的任务会被分派到正在并发运行的 workers 上去,因此那些任务将会被并发且无序地被执行。
请在提 PR 之前仔细阅读 Contributing Guidelines,感谢那些为 ants 贡献过代码的开发者!
ants 的源码允许用户在遵循 MIT 开源证书 规则的前提下使用。
以下公司/组织在生产环境上使用了 ants。
</a>
</td>
<td align="center" valign="middle">
<a href="https://www.bytedance.com/zh/" target="_blank">
</a>
</td>
<td align="center" valign="middle">
<a href="https://tieba.baidu.com/" target="_blank">
</a>
</td>
<td align="center" valign="middle">
<a href="https://weibo.com/" target="_blank">
</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://www.tencentmusic.com/" target="_blank">
</a>
</td>
<td align="center" valign="middle">
<a href="https://www.futuhk.com/" target="_blank">
</a>
</td>
<td align="center" valign="middle">
<a href="https://www.shopify.com/" target="_blank">
</a>
</td>
<td align="center" valign="middle">
<a href="https://weixin.qq.com/" target="_blank">
</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://www.baidu.com/" target="_blank">
</a>
</td>
<td align="center" valign="middle">
<a href="https://www.360.com/" target="_blank">
</a>
</td>
<td align="center" valign="middle">
<a href="https://www.huaweicloud.com/" target="_blank">
</a>
</td>
<td align="center" valign="middle">
<a href="https://matrixorigin.cn/" target="_blank">
</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://adguard-dns.io/" target="_blank">
</a>
</td>
<td align="center" valign="middle">
<a href="https://bk.tencent.com/" target="_blank">
</a>
</td>
<td align="center" valign="middle">
<a href="https://cn.aliyun.com/" target="_blank">
</a>
</td>
<td align="center" valign="middle">
<a href="https://www.zuoyebang.com/" target="_blank">
</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://www.antgroup.com/" target="_blank">
</a>
</td>
<td align="center" valign="middle">
<a href="https://zilliz.com/" target="_blank">
</a>
</td>
<td align="center" valign="middle">
<a href="https://amap.com/" target="_blank">
</a>
</td>
<td align="center" valign="middle">
<a href="https://www.apache.org/" target="_blank">
</a>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<a href="https://www.coze.cn/" target="_blank">
</a>
</td>
</tr>
这些开源项目借助 ants 进行并发编程。
如果你的项目也在使用 ants,欢迎给我提 Pull Request 来更新这份用户案例列表。
ants 项目一直以来都是在 JetBrains 公司旗下的 GoLand 集成开发环境中进行开发,基于 free JetBrains Open Source license(s) 正版免费授权,在此表达我的谢意。
<a href="https://www.jetbrains.com/?from=ants" target="_blank"></a>
<table> <tbody> <tr> <td align="center" valign="middle"> <a target="_blank" href="https://buymeacoffee.com/panjf2000">当您通过以下方式进行捐赠时,请务必留下姓名、GitHub 账号或其他社交媒体账号,以便我将其添加到捐赠者名单中,以表谢意。
</a>
</td>
<td align="center" valign="middle">
<a target="_blank" href="https://www.patreon.com/panjf2000">
</a>
</td>
<td align="center" valign="middle">
<a target="_blank" href="https://opencollective.com/panjf2000">
</a>
</td>
</tr>