[Golang]互斥到底该谁做?channel还是Mutex
2015-03-09 11:08
309 查看
channel
– 本质上是一个 MessageQueue
– 非常正统的执行体间通讯设施
• sync.Mutex/RWMutex/Cond/etc
– 不要把 channel 当做万金油,该 Mutex 还是要
• 误区
– 用 channel 来做互斥 ( 正常应该让 Mutex 做 )
• 比如多个 goroutine 访问一组共享变量
• channel 的成本 – 作为消息队列, channel 成本原高于 Mutex
– 成本在哪?
• channel 内部有 Mutex ,因为它本身属于共享变量
• channel 内部可能有 Cond ,用来等待或唤醒满足条件的
goroutine
• 出让 cpu 并且让另一个 goroutine 获得执行机会,这个切
换周期不低,远高于 Mutex 检查竞争状态的成本 ( 后者通常
只是一个原子操作 )
– 本质上是一个 MessageQueue
– 非常正统的执行体间通讯设施
• sync.Mutex/RWMutex/Cond/etc
– 不要把 channel 当做万金油,该 Mutex 还是要
• 误区
– 用 channel 来做互斥 ( 正常应该让 Mutex 做 )
• 比如多个 goroutine 访问一组共享变量
• channel 的成本 – 作为消息队列, channel 成本原高于 Mutex
– 成本在哪?
• channel 内部有 Mutex ,因为它本身属于共享变量
• channel 内部可能有 Cond ,用来等待或唤醒满足条件的
goroutine
• 出让 cpu 并且让另一个 goroutine 获得执行机会,这个切
换周期不低,远高于 Mutex 检查竞争状态的成本 ( 后者通常
只是一个原子操作 )
相关文章推荐
- 不得不知道的golang之sync.Mutex互斥锁源码分析
- golang sync mutex 互斥锁
- GoLang Channel与mutex的选择,性能差不多
- 【GoLang】golang中 channel 实现同步 与mutex/atomic 实现同步的讨论
- 网页设计到底是美术?是技术?还是...?
- 到底是地方好呢?还是部队好呢?
- Golang实现带优先级的channel
- Java finally语句到底是在return之前还是之后执行?
- 关于.Net与J2EE的比较,到底用微软平台还是Java平台的问题
- Java:到底是值传递还是引用传递
- Golang原理之goroutine与channel
- W3C下的冒泡和捕获机制。到底是冒泡呢。还是捕获呢。一个DOM元素绑定多个事件时如何执行。
- 游戏服务器:到底使用UDP还是TCP
- W3C下的冒泡和捕获机制。到底是冒泡呢。还是捕获呢。一个DOM元素绑定多个事件时如何执行。
- 态度还是技术 黑客到底是什么(一)
- 数据库中存储日期的字段类型到底应该用varchar还是datetime
- Golang中的int类型和uint类型到底有多大?
- 到底是Tier还是Layer?
- Java参数传递到底是值传递还是引用传递?
- MySQL的varchar定义长度到底是字节还是字符