当前位置: 首页 > 科技观察

Go 开发团队 leader 批评 AWS 文章对 Go 存在严重误导

时间:2023-03-13 13:39:20 科技观察

Go开发团队的负责人批评AWS的文章对Go存在严重误导。在本文中,AWS将Rust与Go作为示例进行了比较。文章提到早期Discord的一个关键Go服务出现了问题。它本来是一个非常简单的服务,但是它的尾部延迟(TailLatency)却非常慢。AWS认为原因是Go是一种垃圾收集(GC)语言,因此当创建和释放对象时,垃圾收集器需要停止程序执行并定期运行垃圾收集。当垃圾收集器运行时,会导致进程无法响应请求。为了解决这个问题,Discord决定尝试用Rust重写服务。测试结果表明,使用Rust重写的速度提升了10倍以上,最慢的尾部延迟时间也减少到原来的1%左右。下图展示了运行过程中的CPU峰值和响应时间,左边是Go版本,右边是Rust版本。Go开发团队负责人RussCox(rsc)认为,这里的AWS比较对Go具有严重的误导性。他认为,AWS文章在对比两者时,在使用了新的数据结构和更多内存后,将Go版本的数据和Rust版本的数据放在一起,并刻意圈出“ms”和“μs”的时间尺度。rsc表示,这要么是对AWS最初发布的Discord帖子的误解,要么就是一个公然的谎言。因为在Discord的原文中,他们在展示同级别的Go服务器和Rust服务器的对比时,图表数据的来源既包括原始版本,也包括重写数据结构并提供额外内存后的情况。AWS文章故意歪曲这一点。另外,AWS引用的Discord数据当时使用的是Go1.10版本,但现在即将推出1.18版本。在这8次主要的发布迭代过程中,Go团队改进了很多功能,并对因GC造成的中断提供了巨大的改进(这正是Discord当时面临的问题)。除此之外,rsc认为AWS引用的一项“非常有趣”的研究的真实性非常可疑。rsc表示AWS的文章关于Rust是公平和客观的,但关于Go的文章具有误导性。他认为Rust和Go不是零和博弈的关系。Rust非常好,所以他更喜欢关注Go和Rust相互补充并很好地协同工作的方式。比如这个案例:https://thenewstack.io/rust-vs-go-why-theyre-better-together/本文转自OSCHINA文章标题:Go开发组长批评AWS文章严重误导去本文地址:https://www.oschina.net/news/184024/rsc-critique-on-the-recent-aws