Golang 学习路线 - Part 20:并发介绍

这里是 Golang 教程系列的第二十部分。
golang 是一种并发式语言,而不是平行语言。在讨论在 Go 中如何处理并发之前,我们必须首先理解什么是并发,以及它与并行有什么不同。

什么是并发?

并发是同时处理许多事情的能力。最好用一个例子来解释。

让我们以慢跑为例。在一个人的晨跑中,我们说他的鞋带松了。现在这个人停止跑步,系好鞋带,然后又开始跑步。这是一个典型的并发性示例。这个人既能跑步又能系鞋带,也就是说这个人能同时处理很多事情。

什么是并行,它与并发有什么不同?

并行就是在同一时间做很多事情。它可能听起来与并发相似,但实际上是不同的。

让我们用同样的慢跑例子来更好地理解它。在这种情况下,我们假设这个人正在慢跑,同时也在用 iPod 听音乐。在这种情况下,这个人一边慢跑一边听音乐,也就是说他同时在做很多事情。这叫做并行度。

并发和并行 - 技术观点

我们通过实例了解了什么是并发,以及它与并行的不同之处。现在让我们从一个更专业的角度来看他们,因为我们是极客 ????

假设我们正在编写一个 web 浏览器。web 浏览器有各种组件。其中两个是 web 页面呈现区域和用于从 internet 下载文件的下载器。让我们假设我们已经以这样一种方式来组织我们的浏览器代码,即每个组件都可以独立地执行(这是通过使用 Java 等语言中的线程来完成的,在 Go 中我们可以使用 Goroutines 来实现,后面会详细介绍)。当此浏览器在单核心处理器中运行时,处理器将在浏览器的两个组件之间切换上下文。它可能会下载一个文件一段时间,然后它可能会切换到呈现用户请求的网页的 html。这就是并发。并发进程在不同的时间点开始,它们的执行周期重叠。在这种情况下,下载和呈现在不同的时间点开始,它们的执行重叠。

假设同一个浏览器在多核处理器上运行。在这种情况下,文件下载组件和HTML呈现组件可能在不同的内核中同时运行。这就是所谓的并行性。

Golang 学习路线 - Part 20:并发介绍

并行并不总是更快的执行时间。这是因为并行运行的组件可能必须彼此通信。例如,在我们的浏览器中,当文件下载完成时,这应该传递给用户,比如使用弹出窗口。这种通信发生在负责下载的组件和负责呈现用户界面的组件之间。这种通信开销在并发系统中很低。在组件在多核中并行运行的情况下,这种通信开销很大。因此,并行程序并不总是更快的执行时间!

在 Go 中支持并发

并发是 Go 编程语言的固有部分。并发是在 Go 中使用 Goroutines 和 channel 来处理的。我们将在接下来的教程中详细讨论它们。

以上就是对并发性的介绍。请留下您的反馈和意见。祝你有美好的一天。

下一个教程 - Goroutines