初级会员
  • 第 16150 位会员
  • jarlyyn
  • 2018-02-09 18:28:04
  • Offline
  • 18 72

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 评论了主题 关于简短变量
    对于每次循环,key和val都是新的。
  • 循环的标签,用于在多个循环嵌套的时候知道continue或者break哪一层循环
  • 这是标准的json啊,json里中文就是这样的啊,解析出来就是中文啊,你用哪个语言都是这样。 你是要手工处理么?
  • #34 @anko sync.map的确是线程并发的,而且是并发安全的。 你对于并发安全和原子性的概念弄反了。 sync.map的典型场景是缓存/系统全局设置。每次设和取之前没有逻辑关系。 另外,sync.Map的性能测试和实现原理实际上网上很多。 而且sync.Map的代码注释写的非常清楚 // Map is like a Go map[interface{}]interface{} but is safe for concurrent use // by multiple goroutines without additional locking or coordination. // Loads, stores, and deletes run in amortized constant time. // // The Map type is specialized. Most code should use a plain Go map instead, // with separate locking or coordination, for better type safety and to make it // easier to maintain other invariants along with the map content. // // The Map type is optimized for two common use cases: (1) when the entry for a given // key is only ever written once but read many times, as in caches that only grow, // or (2) when multiple goroutines read, write, and overwrite entries for disjoint // sets of keys. In these two cases, use of a Map may significantly reduce lock // contention compared to a Go map paired with a separate Mutex or RWMutex. 大部分情况应该使用锁和map,sync.MAp适用两个场景 1.偶尔写入大量读取 2.多个进程会经常读写/覆盖不相关的节点的数据。 至于你说map加锁,只要看一下sync.Map的结构就知道,sync.map就是一个锁,一个 map,一个atomic.Value实现的,本来就是根据特殊场景规划好的锁+map
  • 再说的更清楚写。 你的代码里达不到你预期的不是sync.map 而是+= 你需要用atomic 的add函数代替+=