共计 685 个字符,预计需要花费 2 分钟才能阅读完成。
今天在写 Kitex 框架关于负载均衡算法的源码解析 ,在跑 Benchmark 的时候突然发现我之前贡献的一个负载均衡算法性能有很大的倒退,折腾了好久都没明白,甚至把我当时本地的几个 commit 都签出测试还是一样
排查来排查去,感觉可能是依赖的 fastrand 有问题,框架里依赖的是字节的 fastrand
import "github.com/bytedance/gopkg/lang/fastrand"
但是我过去一看,这个 fastrand 已经两年没动过了,但是这个 fastrand 又依赖 runtimex
包里的 Fastrand()
,这个包更是三年没动过了(
我就去看这个 runtimex
是什么东西
package runtimex
import (_ "unsafe" // for linkname)
//go:linkname Fastrand runtime.fastrand
func Fastrand() uint32
啊,原来是直接搬来的 runtime
里的 fastrand
,我一想,难道是 Go 的版本问题吗?
于是我写了个 Benchmark,再把 Go 从 1.22 调到 1.21,卧槽,的确是这个原因
于是我在 Kitex 里也改成了 1.21,的确和当时一模一样了
我去 issue 和 PR 里找相关的内容,但是没找到,但这个 fastrand 肯定很多人都在用吧,怎么我成了第一个发现的了
于是我自己交了一个 PR bytedance/gopkg#206,但这个仓库好像已经不怎么维护了,一堆 issue 和 PR 挂着()
原因就是 1.22 的更新导致的,找到了一篇文章 https://zhuanlan.zhihu.com/p/673906980
正文完