Use a Mutex or a channel ?
文章目录
Use a sync.Mutex or a channel?
分别给了我们3个channel使用场景:
- 1.传递数据的所有权
- 2.分配工作单元
- 3.传达异步结果
2个mutex的使用场景:
- 1.缓存
- 2.状态
《Concurrency In Go》书中第二章 “Go’s Philosophy on Concurrency” 里对此也有一张决策树和详细的论述
总结
Go 通过 channel 实现 CSP 通信模型,主要用于 goroutine 之间的消息传递和事件通知。而对于一些性能要求较高,或防止并发修改内部状态等场景,通过mutex来实现会更为合适。
- 1. 关注数据的流动,就可以使用channel解决并发问题。
- 2. 不流动的数据,如果存在并发访问,尝试使用sync.Mutex保护数据。
- 3. 如果sync.Mutex实现流程复杂,可以改用channel实现
参考资料
文章作者 zhengxz
上次更新 2020-01-16