加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[Golang]互斥到底该谁做?channel还是Mutex

发布时间:2020-12-16 18:45:17 所属栏目:大数据 来源:网络整理
导读:?? channel – 本质上是一个 MessageQueue – 非常正统的执行体间通讯设施 ? sync.Mutex/RWMutex/Cond/etc – 不要把 channel 当做万金油,该 Mutex 还是要 ? 误区 – 用 channel 来做互斥 ( 正常应该让 Mutex 做 ) ? 比如多个 goroutine 访问一组共享变量 ?
??
channel
– 本质上是一个 MessageQueue
– 非常正统的执行体间通讯设施
? sync.Mutex/RWMutex/Cond/etc
– 不要把 channel 当做万金油,该 Mutex 还是要

? 误区
– 用 channel 来做互斥 ( 正常应该让 Mutex 做 )
? 比如多个 goroutine 访问一组共享变量

? channel 的成本
– 作为消息队列, channel 成本原高于 Mutex
– 成本在哪? ? channel 内部有 Mutex ,因为它本身属于共享变量 ? channel 内部可能有 Cond ,用来等待或唤醒满足条件的 goroutine ? 出让 cpu 并且让另一个 goroutine 获得执行机会,这个切 换周期不低,远高于 Mutex 检查竞争状态的成本 ( 后者通常 只是一个原子操作 )

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读