Optimization

  • Published on
    自从我们迁移到 k8s, 我们观察到 k8s 集群里的 gitlab CI runner 在跑 golangci-lint 的时候比本机跑慢很多. 本机一般几十秒就能搞定的事情, 在跑 CI 的时候, 基本上都要花上几分钟甚至几十分钟. (依项目代码量而异) 当然, 由于 CI 都是自动跑的, 大部分时间我们基本上不会花时间去刻意观察 CI 的执行. 因此慢一点其实也不会影响什么. 这个周末正好趁疫情居家哪也去不了, 研究了一下怎么想办法将速度优化. 起初我以为是因为普通云盘的 IO 性能低下导致的问题, 因为我们的节点的 CPU 和 内核配置都还算不错, 不至于跑个 CI 都会因为这个影响到速度. 但是经过研究, 我发现其实大部分时间花在重复地一次又一次地加载go mod 和 重复地进行代码静态分析. ...
  • Published on
    ## 简单的代码, 问题不简单 今天有人发了段代码给我, 然后问输出结果是什么? 这段代码看上去非常简单, 但是确是很有迷惑性. ```go // a.go package main import ( "fmt" "time" ) var x int64 = 0 func storeFunc() { for i := 0; ; i++ { if i%2 == 0 { x = 2 } else { x = 1 } } } func main() { go storeFunc() for { fmt.Printf("x=%v\n", x) // x=0 time.Sleep(time.Millisecond * 10) ...