一句话:首次系统研究真实 Go 程序中的并发缺陷,揭示过半缺陷源于 Go 特有机制,并评估修复与检测工具。
Go 倡导以消息传递进行线程间通信,但其新并发机制对程序错误的影响尚缺乏实证理解。本文首次系统研究真实 Go 程序中的并发缺陷,选取 Docker、Kubernetes、gRPC 等六个流行项目,共分析 171 个并发缺陷。结果显示超过一半缺陷由 Go 特有的非传统问题导致;作者还考察了这些缺陷的修复方式,通过实验复现缺陷,并用两个公开可用的 Go 缺陷检测器进行评估。该研究加深了对 Go 并发模型的理解,为编写更可靠 Go 软件及开发调试诊断工具提供了指导。
Go is a statically-typed programming language that aims to provide a simple, efficient, and safe way to build multi-threaded software. Since its creation in 2009, Go has matured and gained significant adoption in production and open-source software. Go advocates for the usage of message passing as the means of inter-thread communication and provides several new concurrency mechanisms and libraries to ease multi-threading programming. It is important to understand the implication of these new proposals and the comparison of message passing and shared memory synchronization in terms of program errors, or bugs. Unfortunately, as far as we know, there has been no study on Go's concurrency bugs. In this paper, we perform the first systematic study on concurrency bugs in real Go programs. We studied six popular Go software including Docker, Kubernetes, and gRPC. We analyzed 171 concurrency bugs in total, with more than half of them caused by non-traditional, Go-specific problems. Apart from root causes of these bugs, we also studied their fixes, performed experiments to reproduce them, and evaluated them with two publicly-available Go bug detectors. Overall, our study provides a better understanding on Go's concurrency models and can guide future researchers and practitioners in writing better, more reliable Go software and in developing debugging and diagnosis tools for Go.
DOI 原文 ·
@inproceedings{paperbot4856,
title = {Understanding Real-World Concurrency Bugs in Go},
author = {Tengfei Tu and Xiaoyu Liu and Linhai Song and Yiying Zhang},
booktitle = {ASPLOS},
year = {2019},
doi = {10.1145/3297858.3304069}
}