Part 20:并发介绍

欢迎来到Golang教程系列 的第20部分

Go 是一个并发语言而不是并行语言。讨论在 Go 中如何处理并发之前,我们必须先要理解什么是并发以及它和并行有什么不同。

什么是并发?

并发是一次处理多个事物的能力。最好是用一个例子来解释。

我们考虑下一个人跑步。在他晨跑期间,我们说他的鞋带开发。现在这个人停止了跑步,系紧他的鞋带,然后再次开始跑步。这是一个经典的并发例子。这个人有处理跑步和系鞋带,这就是说这个人有一次处理多个事件的能力。

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

并行是同时处理大量的事物。这听起来和并发相似但实际上是不同的。

我们可以通过同样的跑步例子更好的理解它。这个例子中,我们假设这个人在跑步的同时用 iPod 听音乐。这种情况下,这个人跑步和听音乐是同时的,这就是他在同时处理多个事物。这就是所谓的并行。

技术上的并行和并发

我们使用 真实世界的例子理解发什么是并发以及它和并 行有会什么不同。作为极客,让我们从更技术上来看待它们。

我们编写了一个 web 浏览器,这个浏览器有很多不同的组件。其中两个是网页渲染区块和从网上下载文件的下载器。我们假设以这些部件都可以独立执行(这在如Java似的语言中使用线程来完成而在Go中我们使用之后介绍的Goroutines)的方式来构建我们的浏览器代码。当这个浏览器运行在单核处理器上时,处理器将在浏览器的两个组件间切换上下文。它可能有时候在下载一个文件而另一个时候切换到渲染用户请求的网页。这被称为并发。并发处理在不同的时间点开始,他们执行周期有交叉。在这个例子中,下载和渲染在不同的时间点开始,他们执行有重叠。

同一个浏览器运行在一个 多核处理器上,在这个例子中,下载组件和 HTML 渲染组件可能同时运行在不同的核上,这被称为并行。

图片1
并行并不经常会带来更快的执行时间,这是因为运行在并行程序的组件可能必须互相通信。例如,在我们浏览器的例子上中,当文件下载完成,它应该使用弹窗传达给用户。这个通信发生在负责下载的组件和负责渲染用户接口的组件之间。并发系统的通信开销很低。当组件以并行模式运行在多核处理器,通信开销就高。因此并行程序并不总是导致更快的时间。

在 Go 中支持并发

并发是Go程序语言因有的部分。并发在Go中使用Goroutines和通道处理。我们将在后续的教程中详细的讨论他们。

下一教程 - Goroutines

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值