跳转到主要内容

【Go语言高级开发】Golang Goroutines 的并发性

现在,Go 是一种令人难以置信的高性能语言,它具有许多强大的功能,可让您构建令人难以置信的快速应用程序。通过为我们提供这些 goroutine 和通道,它重新定义了构建并发程序的意义。

使用 goroutine 是一种非常快速的方法,可以将顺序程序转换为并发程序,而无需担心创建线程或线程池之类的事情。但是,与所有并发编程一样,这会带来一些危险,在你跑来跑去在所有函数调用前面加上 go 关键字之前必须考虑这些危险。

在本教程中,我们将研究如何在基于 Go 的程序中使用 goroutine,并随后提高程序执行的性能。

目标


在本教程结束时,您应该:

  • 对 goroutine 是什么以及如何使用它们来提高应用程序的性能有深入的了解
  • 知道如何创建和使用匿名 goroutine。
  • 了解使您的应用程序并发的一些危险。


视频教程


如果您愿意,本教程还提供视频格式。如果您想支持我的工作,请考虑喜欢并订阅我的 YouTube 频道。

https://youtu.be/ARHXmR0_MGY

【Go语言高级开发】Go Mutex 教程

在编写高并发应用程序时使用 Go 并不会阻止您编写具有竞争条件的系统。 这些竞争条件可能会导致您的系统出现意外问题,这些问题既难以调试,有时甚至更难修复。

因此,我们需要能够编写能够以安全的方式并发执行而不影响性能的 Go 程序。 这就是互斥体发挥作用的地方。

在本教程中,我将向您展示一些您可以在自己的 Go 应用程序中遵循的基本方法,这些方法将帮助您保护您的代码免受这些讨厌的竞争条件的影响。

视频教程


本教程以视频格式提供:

https://youtu.be/cjMdUmfzQWs

理论


在深入研究代码之前,让我们快速了解一下理论以及为什么我们需要互斥锁。

因此,互斥锁或互斥是一种机制,它允许我们防止并发进程进入数据的关键部分,而它已经由给定进程执行。

让我们考虑一个例子,我们有一个银行余额和一个从该银行余额存入和提取资金的系统。在单线程同步程序中,这将非常容易。我们可以通过少量的单元测试有效地保证它每次都能按预期工作。

但是,如果我们开始引入多线程,或者在 Go 的案例中引入多个 goroutine,我们可能会开始在代码中看到问题。

【Go语言高级开发】Go Channels 教程

在本教程中,我们将研究如何在基于 Go 的应用程序中使用通道。

通道是连接基于 Go 的应用程序中的 goroutine 之间的管道,允许通信以及随后在变量之间传递值。

与其他编程语言相比,它们非常方便,可以帮助您在 Go 中构建令人难以置信的高性能、高并发应用程序,而无需大惊小怪。这绝不是侥幸,在设计语言时,核心开发人员决定他们希望他们的语言中的并发性成为一等公民,并使其尽可能简单地使用,不要走得太远,也不允许开发人员他们需要工作的自由。

如此轻松地构建并发系统的能力首先吸引了我对这门语言的兴趣,我不得不说,到目前为止,这绝对是一种乐趣。

注意 - 如果您想了解有关 goroutine 的更多信息,我建议您查看我的其他关于 goroutines 的教程。

目标


在本教程结束时,您将:

  • 对渠道背后的理论有深刻的理解
  • 能够创建使用通道的简单并发 Go 应用程序

先决条件


为了完成本教程,您需要满足以下先决条件: