当前位置: 首页 > wzjs >正文

吉粤建设工程股份有限公司网站安阳建设局网站

吉粤建设工程股份有限公司网站,安阳建设局网站,电子商务网站建设与维护实验报告,馆陶网站常见的内存逃逸 ? setNx 是一个原子操作命令 golang中三种线程安全的MAP-CSDN博客 使用Go语言实现线程安全的Map_go map线程安全-CSDN博客 https://zhuanlan.zhihu.com/p/9651365604  // 处理map 并发问题 使用sync.Mutex sync.Mutex是一个互斥锁&#xff0c…

常见的内存逃逸 ?

setNx 是一个原子操作命令

golang中三种线程安全的MAP-CSDN博客

使用Go语言实现线程安全的Map_go map线程安全-CSDN博客

https://zhuanlan.zhihu.com/p/9651365604  // 处理map 并发问题

使用sync.Mutex

sync.Mutex是一个互斥锁,可以保护一个临界区,确保同时只有一个goroutine可以访问这段代码。

package mainimport ("fmt""sync"
)type SafeMap struct {m    map[string]intlock sync.Mutex
}func NewSafeMap() *SafeMap {return &SafeMap{m: make(map[string]int),}
}func (sm *SafeMap) Set(key string, value int) {sm.lock.Lock() // 在修改map之前加锁sm.m[key] = valuesm.lock.Unlock() // 修改完成后解锁
}func (sm *SafeMap) Get(key string) (int, bool) {sm.lock.Lock() // 在读取map之前加锁value, exists := sm.m[key]sm.lock.Unlock() // 读取完成后解锁return value, exists
}func main() {sm := NewSafeMap()sm.Set("foo", 1)value, exists := sm.Get("foo")if exists {fmt.Println("Value:", value)} else {fmt.Println("Key not found")}
}

使用sync.RWMutex

sync.RWMutex是一个读写锁,允许多个goroutine同时读取map,但写入时需要独占访问。这通常在读取操作远多于写入操作时更为高效。

package mainimport ("fmt""sync"
)type SafeMap struct {m    map[string]intlock sync.RWMutex
}func NewSafeMap() *SafeMap {return &SafeMap{m: make(map[string]int),}
}func (sm *SafeMap) Set(key string, value int) {sm.lock.Lock() // 在修改map之前加锁(写锁)sm.m[key] = valuesm.lock.Unlock() // 修改完成后解锁(写锁)
}func (sm *SafeMap) Get(key string) (int, bool) {sm.lock.RLock() // 在读取map之前加读锁value, exists := sm.m[key]sm.lock.RUnlock() // 读取完成后解锁(读锁)return value, exists
}func main() {sm := NewSafeMap()sm.Set("foo", 1)value, exists := sm.Get("foo")if exists {fmt.Println("Value:", value)} else {fmt.Println("Key not found")}
}

注意事项:性能和选择使用场景

  • 使用互斥锁(sync.Mutex:适用于读和写操作大致平衡的场景。每次读或写操作都需要获取锁,可能会造成性能瓶颈。

  • 使用读写锁(sync.RWMutex:适用于读操作远多于写操作的场景。读操作可以并行进行,而写操作则需要独占访问。这通常能提供更好的性能。但也要注意,频繁的读操作也可能因为频繁的锁获取和释放而影响性能。因此,选择哪种锁取决于你的具体应用场景。 例如,如果你的应用主要是查询操作,那么使用读写锁通常更合适。如果你的应用主要是更新操作,那么使用互斥锁可能更合适。 总之,选择合适的工具并根据实际使用场景进行优化是非常重要的。

channel 处理并发问题:

// 这个是错误的:没有起到并发作用/*** 并发编程,map的线程安全性问题,使用互斥锁的方式*/
package mainimport ("sync""time""fmt"
)var data map[int]int = make(map[int]int)
var wgMap sync.WaitGroup = sync.WaitGroup{}
var muMap sync.Mutex = sync.Mutex{}func main() {// 并发启动的协程数量max := 10000wgMap.Add(max)time1 := time.Now().UnixNano()for i := 0; i < max; i++ {go modifySafe(i)}wgMap.Wait()time2 := time.Now().UnixNano()fmt.Printf("data len=%d, time=%d", len(data), (time2-time1)/1000000)
}// 线程安全的方法,增加了互斥锁
func modifySafe(i int) {//muMap.Lock()data[i] = i//muMap.Unlock()wgMap.Done()
}/*** 并发编程,map的线程安全性问题,使用channel的方式*/
package mainimport ("time""fmt"
)var dataCh map[int]int = make(map[int]int)
var chMap chan int = make(chan int)func main() {// 并发启动的协程数量max := 10000time1 := time.Now().UnixNano()for i := 0; i < max; i++ {go modifyByChan(i)}// 处理channel的服务chanServ(max)time2 := time.Now().UnixNano()fmt.Printf("data len=%d, time=%d", len(dataCh), (time2-time1)/1000000)
}
func modifyByChan(i int) {chMap <- i
}
// 专门处理chMap的服务程序
func chanServ(max int) {for {i := <- chMapdataCh[i] = iif len(dataCh) == max {return}}
}


文章转载自:

http://d8Xq9WfC.knfgn.cn
http://zte2xAos.knfgn.cn
http://wOEWBhvh.knfgn.cn
http://3WwNfvoc.knfgn.cn
http://VXNFNmnS.knfgn.cn
http://BoqRPteB.knfgn.cn
http://0dgRjebQ.knfgn.cn
http://lPVYPGjl.knfgn.cn
http://cTtOPvQg.knfgn.cn
http://1fvOCFit.knfgn.cn
http://poFTWfRz.knfgn.cn
http://yCuFfkhX.knfgn.cn
http://tFE0zEIV.knfgn.cn
http://yZh6Fl7E.knfgn.cn
http://QyGbuQIu.knfgn.cn
http://yQf8VmRI.knfgn.cn
http://dJ7FmtTi.knfgn.cn
http://Phi3aduo.knfgn.cn
http://NjGMVWYE.knfgn.cn
http://R416NR09.knfgn.cn
http://h3dKRgc2.knfgn.cn
http://jjdmJT46.knfgn.cn
http://5aAqHNcu.knfgn.cn
http://PlE1GZGO.knfgn.cn
http://ziiVLXzV.knfgn.cn
http://2lvMpwRg.knfgn.cn
http://4Z3wy1A2.knfgn.cn
http://5ESHp1sD.knfgn.cn
http://pJRGQziB.knfgn.cn
http://E2ps85UC.knfgn.cn
http://www.dtcms.com/wzjs/735656.html

相关文章:

  • 想让一个网站上线需要怎么做雅思培训班价格一览表
  • 网站页面布局模板wordPress如何设置
  • 可以做高清思维导图的网站深圳网站建设的特殊性
  • 上海网站建设上海网站制作双城网站
  • 网站建设与维护成绩查询个人信息服务平台登录
  • ps做汽车网站下载aso排名优化知识
  • 做餐饮如何加入外卖网站网页制作与网站建设试卷及答案
  • 域名建设好了怎么在建设网站企业网站的建立视频
  • 长春网站建设wordpress最强的教育网站
  • 双峰网站建设网站手机端跳转页面模板
  • 网站建设微信软文c2c网站开发毕业设计
  • 学校网站建设需求分析调研表网站名称 规则
  • 政务服务网站建设标准广州网站建设好评公司
  • 电子商务 网站建设最新发布的手机
  • 志愿者协会网站建设制作网站案例网址
  • 网站建设注册教程wordpress 巨慢
  • wordpress 修改网址导航网站seo快速优化
  • 网站登陆界面怎么做网站后台公告id修改
  • 龙岩做网站城乡企业建设部网站
  • 电商类网站开发项目流程苏华建设集团有限公司网站
  • 景县网站建设公司郑州教育信息网
  • 博客网站需求分析凤凰军事新闻头条
  • 石林彝族网站建设我想做卖鱼苗网站怎样做
  • 帮非法集资公司做网站违法吗珠海网站建设在哪里
  • 网站建设四川冠辰做系统去哪个网站好
  • 什么信息发布型网站如何登陆工商局网站做变更
  • 做fpga的网站wordpress 添加设置
  • 黄山网站建设找哪家服装网站建设公司有哪些
  • 手机网站设计公司网站建设费用报告
  • dedecms网站地图调用广州公司注册需要哪些资料