一些问题的答案

  •     选择三个常见 golang 组件(channel, goroutine, [], map, sync.Map等),列举它们常见的严重伤害性能的 anti-pattern。
        同时 select 很多 channel 的时候,并发较高时会有性能问题。因为 select 本质是按 chan 地址排序,顺序加锁。lock1->lock2->lock3->lock4
        活跃 goroutine 数量较多时,会导致全局的延迟不可控。比如 99 分位惨不忍睹。
        slice append 的时候可能触发扩容,初始 cap 不合适会有大量 growSlice。
        map hash collision,会导致 overflow bucket 很长,但这种基本不太可能,hash seed 每次启动都是随机的。此外,map 中 key value 超过 128 字节时,会被转为 indirectkey 和 indirectvalue,会对 GC 的扫描阶段造成压力,如果 k v 多,则扫描的 stw 就会很长。
        sync.Map 有啥性能问题?写多读少的时候?
          </li>