中文

Golang中真实数据竞争的研究

分布式、并行与集群计算 2022-04-07 v2

摘要

并发编程文献中充满了用于数据竞争检测的工具和技术。然而,关于真实世界、工业规模部署、经验以及有关数据竞争的见解却知之甚少。Golang(简称Go)是一种将并发作为一等公民的现代编程语言。Go同时提供消息传递和共享内存用于并发线程间的通信。Go在现代基于微服务的系统中日益流行。Go中的数据竞争阻碍了其新兴的普及。在本文中,以我们的工业代码库为例,我们展示了Go开发者拥抱并发,并展示了并发的丰富性连同语言习惯用法和细微差别使Go程序极易受到数据竞争的影响。Google的Go发行版附带一个基于ThreadSanitizer的内置动态数据竞争检测器。然而,动态竞争检测器带来可扩展性和不稳定性的挑战;我们讨论了各种软件工程权衡,以使该检测器在规模上有效工作。我们已将该检测器部署于Uber的4600万行Go代码库,托管2100个不同的微服务,发现了超过2000个数据竞争,并修复了超过1000个数据竞争,涉及790个不同的代码补丁,由210位独特开发者在六个月期间内提交。基于对这些Go中数据竞争模式的详细调查,我们提出了七项关于Go语言范式与数据竞争之间复杂相互作用的高层观察。

关键词

引用

@article{arxiv.2204.00764,
  title  = {A Study of Real-World Data Races in Golang},
  author = {Milind Chabbi and Murali Krishna Ramanathan},
  journal= {arXiv preprint arXiv:2204.00764},
  year   = {2022}
}

备注

To appear in the proceedings of the 43rd Programming Language Design and Implementation (PLDI 2022)