sync
sync包常用组件:
| 组件 | 描述 | 特性 | 使用场景示例 |
|---|---|---|---|
| Mutex | 互斥锁 | 读写操作都独占,防止多个 goroutine 同时访问共享资源。 | 需要对共享资源进行严格串行访问的场合 |
| RWMutex | 读写锁 | 允许多个 goroutine 同时读,但写操作独占。 | 读多写少的并发访问场景(读写比例显著高于 1:1 时,才能体现其性能优势) |
| WaitGroup | 并发等待 | 等待一组 goroutine 执行完毕后再继续执行主逻辑。通过 Add() 计数、Done() 递减、Wait() 阻塞实现。 | 需要等待所有并行业务逻辑完成的场景 |
| Once | 单次执行 | 确保某个函数或初始化操作在高并发环境中只执行且成功执行一次。内部使用原子操作和互斥锁。 | 懒加载或单例模式初始化 |
| Cond | 条件变量 | 在特定条件满足时,唤醒等待在该条件变量上的 goroutine。必须配合 Mutex 使用。 | 生产者-消费者模型中的线程协作 |
| Map | 并发安全的 Map | 适用于读多写少的并发场景,作为标准 map + RWMutex 的替代方案。内部使用读写分离和脏数据机制。 | 缓存等读多写少的应用场景 |
| Pool | 对象池 | 临时对象复用,减少垃圾回收 (GC) 压力。通过 Get() 获取对象,Put() 归还对象。归还的对象可能被 GC 回收。 | 频繁创建和销毁临时对象的场景 |