读ants源码,理解goroutine pool
先思考一个问题: go team 说我们可以创建成千上万个 goroutine 用于处理并发,那么我们还需要 goroutine pool 吗? go team 这么说的底气在于其调度模型 G-P-M,确实 但是,没有什么是绝对的,比如100w goroutines or more and more 那么一旦 goroutine 数量过多就会导致资源侵占,CPU暴涨,那么怎么办? 池化! 复用goroutine ants是一个高性能的协程池,实现了对大规模goroutine的调度管理、goroutine复用,允许使用者在开发并发程序的时候限制协程数量,复用资源,达到更高效执行任务的效果。 提纲 池化技术 ants 如何在项目中使用 *ants 代码设计 学习到的优秀源码 池化技术 池化技术是一种通过创建池子来提高对象复用的常用技术,减少重复创建、销毁的开销。常用池化技术有内存池、对象池、线程池、连接池等。在go语言,goroutine的复用可以理解为线程池技术。ants是一个优秀的代码库,被广泛用于生产环境。 ants 的使用 在其官方的README文件有详细的用法说明,这里简单介绍下基础使用 p, err := ants.NewPool(workerNum) if err != nil { // 错误处理 } defer p.Release() // 关闭时释放 // 工作任务 worker := func() { xxx } // 提交任务 err := p....