「GCTT 出品」为什么会存在 Goroutines 泄漏,如何避免?

在这个时代,软件程序和应用程序应该能够快速顺畅地运行。能够并行运行代码是当今满足这种需求的能力之一。但要注意泄漏的危险!我们将与来自Ardan Labs 的 Jacob Walker 讨论这个问题,他专门为 Golang 工程师撰写了这篇博文。

在开始阅读我们关于调试 Goroutines 泄漏的讨论之前,首先简要介绍几个原理,这些原理可以让您更全面地了解这个概念所要解决的挑战。

并发编程

并发编程是一种并行编码的方法,可以同时运行连续线程的集合。通过这种方式,软件程序可以更快地计算,并且因此能够更好地执行。当今多核处理器的功能赋予了这种并发编程能力。

「GCTT 出品」为什么会存在 Goroutines 泄漏,如何避免?

Goroutines:

传统的线程方法基于使用共享内存的线程之间的通信。Go 不是专门使用锁来调解对共享数据的访问,而是促进使用通道在 Goroutine 之间移动对数据的引用。这样,在给定时间段内只有一个 Goroutine 可以访问数据。Golang 满足了使用这些 Goroutine 进行并发编程的需求,这些 Goroutine 基本上是由 Go 在运行时控制的轻量级线程。

「GCTT 出品」为什么会存在 Goroutines 泄漏,如何避免?

泄露

但是要小心! Goroutines 可以缓慢但可靠地储存一段时间,因此浪费你的内存等资源,你甚至都不会注意到它。 因此,了解泄漏的危险和 ( 或 ) 尽早调试它们非常重要。这是我们最近在与 Jacob Walker 的访谈中讨论到的一个主题, 在Gophers Community at Slack 的 #review-interview 频道(40000+ 成员)。 请阅读下面的采访。

「GCTT 出品」为什么会存在 Goroutines 泄漏,如何避免?

总之,我作为开发人员已经工作了大约 10 年之久,并且在过去的 4 年中几乎全身心投入于 Go 中。我开始使用 1.3 版本。

我在 Ardan Labs 担任社区工程师。我的主要活动是教授 Go Fundamentals 和 Ultimate Go 等课程。在授课期间,我写了大量博客文章,开发新内容以及帮助社区开发者。

Sebastiaan(采访者)[4:16 PM]:

你过去 4 年愿意接受 Go 的原因是什么?你为什么喜欢这种语言?

Jacob Walker [4:17 PM]:

哈哈是的,我非常喜欢它:slightly_smiling_face:我接受的正规教育是商业(MBA)。因此当我开始接触开发时,我主要使用在线资源“自学成才”。我开始用 HTML、JS 和 PHP 来做 Web 应用程序开发。几年来,这对我很有帮助,我能够做出一些很酷的东西并解决一些有趣的问题。经过大约 5 年的研究,并涉足其他语言,如 Ruby 和 Python,我想更深入,更接近机器。我查看了 C 和 C ++ 并在那里做了一段时间的实验,但 Go 令我感到振奋。关于 Go 的思维模式和哲学的一些东西真的与我正在寻找的东西以及我想要编写代码的方式相匹配。至于我喜欢这种语言的原因?有很多:slightly_smiling_face: - 简单的语言,令人备受鼓舞的代码和模式。- 一致性。规则在整个语言中的应用方式非常一致。- 工具非常出色。- 一般认为通常有“一种正确的方法”来做大多数事情 , 所以我不必花费大量时间来猜测我应该用可以解决问题的十几种方法中的哪一种 , 我通常倾向于第一种方式。

Sebastiaan ( 采访者 ) [4:25 PM]:

因为你(和 Ardan Labs)是关于 Go 的重要贡献者 / 用户,如果让你回顾这一整年,你有什么感想以及用哪个词概括你所取得的成就?

Jacob Walker [4:26 PM]:

我们已经看到了用户群体的爆炸性增长。公司培训需求不断增加。对于这门语言来说这是非常激动人心的时刻。

Sebastiaan ( 采访者 ) [4:27 PM]:

好的,你能否对这个“激动人心”的时刻再详细解释一下?它的什么地方特别令人兴奋?

Jacob Walker [4:30 PM]:

当然。对我来说,看到所有这些新的 Gopher 加入社区是令人兴奋的!我喜欢这种语言,与别人分享你喜欢的东西是非常美妙的。越来越多的人开始明白经验丰富的牧羊人长期以来所喜爱的语言及其生态系统。现在这些都在以积极的势头发展。

Sebastiaan ( 采访者 ) [4:32 PM]:

您个人希望在 2019 年发布什么样的新功能?

Jacob Walker [4:33 PM]:

嗯,这是个好问题。最近有很多关于 “Go 2”和“泛型”的设计草案、简化错误处理、错误上下文等的讨论。这类讨论很有意思。

我并不担心这些新功能的具体细节因为我知道 :

它们还有很长的路要走。它们与现有设计相比,它们在发布时看起来可能会有很大差异,在不久的将来 , 我可能会非常高兴看到模块问题得到巩固。

Sebastiaan ( 采访者 ) [4:38 PM]:

所以你写了关于 Goroutine 泄露的文章。你为什么会选择这个话题?是因为您多次看到这个问题没有被新手级 Gopher 所解决吗?

Jacob Walker [4:41 PM]:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.alidog.org/248.html