#go
翻译|理解真实世界中Go的并发问题
摘要
Go是一种静态类型的编程语言,旨在提供一种简单、高效、安全的方式来构建多线程软件。自2009年创建以来, Go已经发展成熟,并在生产和开源软件中有显著的应用。 Go主张使用消息传递作为线程通信的手段,并提供一些新的并发机制和库来简化多线程编程。 重要的是,了解这个新机制的含义;同共享内存相比在程序中会出现的错误和问题。 不幸的事,据我们所知,当前没什么关于go并发问题的研究。
在本文中,我们首次对实际Go程序中的并发问题做了系统研究。 我们研究了六个流行的Go软件,包括Docker,K8s,gRPC。我们总共分析了171个并发性错误, 其中超过其中一半以上是由非传统的、针对Go的问题引起的。除了这些bug的根本原因外, 我们还研究了它们的修复方法,进行了重现这些错误的实验,并使用两个公开的Go错误检测器对它们进行了评估。 总的来说,我们的研究提供了一个对Go的并发模型有了更好的了解, 并可以指导未来的研究人员和编写更好、更可靠的Go软件以及为Go开发调试和诊断工具