【慢聊Golang协程池Ants实现原理】大家都知道goroutine 是 Go语言中的轻量级线程实现,由 Go 运行时(runtime)管理,Go 程序会智能地将 goroutine 中的任务合理地分配给每个 CPU 。创建一个goroutine大小大概在2k左右,可以说非常的节省机器资源 。
但是为什么要用池化的方式呢?机器资源总是有限的 , 如果创建了几十万个goroutine , 那么就消耗比较大了,在一些需要对并发资源进行控制、提升性能、控制生命周期的场景中 , 还是需要用到协程池去处理 。
今天就介绍在Github用Go语言实现的有 11.5k?的 Ants 协程池库的实现!
文章插图
图片
初识AntsAnts介绍Go的协程非常轻量 , 但是在超高并发场景,每个请求创建一个协程也是低效的,一个简单的思想就是协程池 。
Ants实现了一个具有固定容量的goroutine池,管理和回收大量goroutine,允许开发人员限制并发程序中的goroutines数量 。
文章插图
图片
Github地址:https://github.com/panjf2000/ants
这是在github上的截图,注意不同版本之间代码实现会略有差异 。
文章插图
图片
特性
推荐阅读
- 基于Go-Kit的Golang整洁架构实践
- Golang清晰代码指南
- 如何优雅的组织Golang项目结构
- 从 Discord 的做法中学习 — 使用 Golang 进行请求合并
- 使用Golang进行自动化的20个库
- 聊聊Golang饱受争议的Error
- Golang 中的字符串:常见错误和优秀实践
- 手撕 Golang 高性能内存缓存库 bigcache!
- Golang 中的 IO 包详解:常用的可导出函数详解
- Golang中降本增效的常规实践