sync.WaitGroup
如果你不关心并发操作的结果,或者有其他方式收集结果,那么WaitGroup是等待一组并发操作完成的好方法。
sync.Mutex、sync.RDMutex
互斥锁和读写锁
提供并发安全的方式来表示对共享资源访问的独占
sync.Cond
Cond实现了一个条件变量,用于等待或宣布事件发生时goroutine的交汇点。通常与互斥锁搭配使用
sync.Once
多次调用一个函数但执行一次。
使用场景:单例模式或是系统开启时的初始化
sync.Pool
- 对象池模式的并发安全实现
- 使用场景
- 用于约束创建资源昂贵的事物(例如数据库连接)
- 预热分配对象的缓存,用于必须尽快运行的操作
- 基准测试 - benchmark
如果使用池子里东西在内存上不是大致均匀的,则会花更多时间将从池中检索,这比首先实例化它要耗费更多的资源。例如,你的程序需要随机和可变长度的切片,在这种情况下Pool不会为你提供太多的帮助。
- 在使用Pool时,请记住以下几点:
- 实例化sync.Pool时,给它一个新元素,该元素应该是线程安全的。
- 当你从Get获得一个实例时,不要假设你接收到的对象状态。
- 当你从池中取得实例时,请务必不要忘记调用Put。否则池的优越性就体现不出来了。这通常用defer来执行延迟操作。
- 池中的元素必须大致上是均匀的。