A Hungry Fool

Tag: Golang

论文阅读:对现实世界中 Go 的并发 Bug 的研究

论文链接:https://golangweekly.com/link/59972/b208593eda

最近在订阅的邮件中看到的一篇论文,来自宾州大学,第一次系统性地研究了几大 Golang 的开源软件中的由并发带来的 Bug。他们研究了以下几个软件的提交历史:Docker, Kubernetes,etcd,gRPC,CockroachDB 和 BoltDB,并得出了一系列很有趣的结论。

研究方法

这次研究的重点是并发相关的 bug,他们的研究方法是(扒了这些项目的黑历史):搜索了这些项目的 Github 提交历史,搜索“race“,“deadlock”,“synchronization”等关键字,或是和 Golang 特有的同步原语的关键字,如“context”,“once”,“WaitGroup”,等等,找出对同步 bug 的修复,甚至对某些 bug 进行了复盘和重现,并将这些 bug 归类为“阻塞”或是“非阻塞”。

不同项目中的bug数量及类型

调试一个Go应用的死锁Bug

上一周几乎花了一整周的时间调试这个头疼的死锁 Bug。死锁 Bug 很难重现,因此也很难调试。谨以此文纪念这个教训。

Golang 初体验

最初接触 Golang 是因为工作需要。起初很不情愿地接手了一个 golang 项目,但是阴差阳错地喜欢上了这门语言。

Powered by WordPress & Theme by Anders Norén