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

Posted 孙飞 Sunface

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Golang]互斥到底该谁做?channel还是Mutex相关的知识,希望对你有一定的参考价值。

 channel
– 本质上是一个 MessageQueue
– 非常正统的执行体间通讯设施
• sync.Mutex/RWMutex/Cond/etc
– 不要把 channel 当做万金油,该 Mutex 还是要

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

以上是关于[Golang]互斥到底该谁做?channel还是Mutex的主要内容,如果未能解决你的问题,请参考以下文章

生产环境出现事故,开发和运维都有责任,到底该谁背锅

golang管道

golang-锁-死锁,互斥锁,读写锁

go语言中sync包和channel机制

Golang 并发: goroutine and channel

Golang 并发: goroutine and channel