SingleFlight 总结
提供了三个参数 Do 同步通知、Dochan 异步 chan 通知、Forget 删除 map 的存在的键值
每次调用都会重置 map
结构体是由 mu sync.Mutex、m map[string]*call 组成,mu 用于操作的排它锁,m 用于存储已有的键值的个数
如果 m 中存在当前键值对,就会阻塞等待,不存在的时候会加创建 call 结构存入 m 中
Dochan 会异步执行,将结果放入 chan 通知其他阻塞的协程
阻塞的协程永的 WaitGroup 实现
1 | package main |
每一次调用 do 都会重新开始,内存不会持久化支持的 map 集合
docall 的简单使用
1 | package main |
1 | 每一次调用dochan都会重新开始,内存不会持久化支持的map集合,只不过将结果挡在chan中进行传输 |