登录
首页 >  Golang >  Go问答

互斥体数量过多的负面影响是什么?

来源:stackoverflow

时间:2024-02-27 17:45:24 423浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《互斥体数量过多的负面影响是什么?》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

在我的 go 代码中,我没有。需要互斥体的结构:

type vitalMacs struct {
        mu   *sync.RWMutex
        macs map[string]bool
}

//macInfo would store oui info
type macInfo struct {
        mu       *sync.RWMutex
        infoDict map[string]*string
}

var (
        NetOPMutex  sync.RWMutex
        ipMacGlobal = make(map[string]string)
        macInfoVar  = macInfo{mu: &NetOPMutex}
        vitalMacsVar = vitalMacs{mu: &NetOPMutex}
        //vitalMacsVar = vitalMacs{mu: &sync.RWMutex{}} // <- like this 
)

我可以对所有这些使用 netopmutex,或者将新的互斥体设置为 &sync.rwmutex{} - 这让我想知道: 在代码中使用大量不同的互斥锁会产生副作用吗?

不要试图避免互斥体,你必须保护你必须保护的东西,毫无疑问。

我知道,如果我使用单个互斥体,事情就必须互相等待并且运行良好。另一方面,拥有大量不同的互斥体(30+)是否会表现为更高的 cpu 利用率或更多的时间处于用户模式与内核模式等?


解决方案


sync.Mutexsync.RWMutex 是结构类型,具有互斥体与具有普通结构值是相同的。在您的应用程序中拥有许多结构值是否有任何副作用?显然不是。

创建互斥锁并不涉及魔法。它相当于只是创建一个结构体值。

使用互斥体也不涉及魔法。检查来源:Mutex.Lock()Mutex.Unlock()。它们不会启动 goroutine 或执行消耗 CPU 的操作。

不要仅仅为了节省/备用一些内存而使用单个互斥锁。如果适当,请使用多个互斥体来减少/缓解锁争用。

本篇关于《互斥体数量过多的负面影响是什么?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>