简介
https://github.com/panjf2000/ants
这是一个 goroutine pool 的包,
可以生成固定 goroutine 数量的 pool.
重复使用,提高效率
示例
package main |
源码
从示例看使用场景分为两种情况:
- 默认 pool 或者固定大小的 pool 运行 func
- 带 func 的 pool 可以传入参数
新建 pool
- 默认 pool 可以直接使用
- 创建固定大小的 pool
func NewPool(size int) (*Pool, error) |
- 创建携带 func 的 pool
func NewPoolWithFunc(size int, f pf) (*PoolWithFunc, error) |
注入要执行的 func
func (p *Pool) Submit(task f) error { |
获取可用 worker
// getWorker returns a available worker to run the tasks. |
启动任务
// run starts a goroutine to repeat the process |
释放 worker
// putWorker puts a worker back into free pool, recycling the goroutines. |
核心的代码看懂这些就足够了.
有一些小知识点补充一下:
锁和解锁
中间成为了同步操作,针对并发的时候,对任何东西的修改,添加都应该加锁,让操作成为原子操作
- sync.Mutex.Lock()
- sync.Mutex.Unlock()
"sync" | "sync/atomic"
这两个包里直接可以调用的方法,可以不用锁的方式,就可以保证是同步的原子操作