美文网首页
Go教程第十七篇: 介绍并发

Go教程第十七篇: 介绍并发

作者: 大风过岗 | 来源:发表于2020-05-05 18:26 被阅读0次

Go教程第十七篇: 介绍并发

本文是《Go系列教程》的第十七篇文章。

Go是一个并发语言而不是一个并行语言。在讨论Go的并发之前,我们先来理解一下什么是并发,以及并发和并行的区别是什么。

什么是并发 ?

并发是一次可以处理很多事情的能力。用个例子说明一下。假定一个慢跑的人,在他早晨慢跑的时候,他的鞋带松了。这时,他停下来,系好鞋带,又继续往前跑。这就是并发的典型案例。这个跑步的人既能跑步还可以系鞋带,这就是说,他有能力一次处理很多件事。

什么是并行以及并行和并发的区别是什么?

并行就是在同一时间点做很多事情。这听起来和并发很像,但是实际上却有很大的不同点。
我们还是用慢跑这个案例来说明一下并行。我们假定这个人在慢跑的时候,同时也在听着音乐。这种情况下,就是说慢跑和听音乐是同时进行的,即:他在同一时间同时做很多事。这就叫并行。

从技术的观点看并发和并行

上面我们通过现实生活中的例子,已经理解了什么是并发,以及它和并行之前的区别。现在我们从技术的角度再次审视下他们。
举例,我们正在开发一个web浏览器。这个浏览器有很多组件。其中有俩个组件,一个是负责处理页面请求,另一个是下载器(专门用于从网上下载文件)。我们假定,我们在编码时,采用的是模块化编程,其中的每一个组件都可以独立执行(在Java中这可以通过现存来做到,在Go中,我们可以使用Goroutine来做到)。当浏览器在单核处理器上运行时,处理器需要在这俩个组件间做上下文切换。它可能一段时间用于下载文件,而一会儿又去为用户打开页面。这也即是并发。处理页面请求和下载的执行是交叉进行的。

但如果我们的这个web浏览器运行在一个多核处理器上,此时,文件下载组件和负责页面请求的页面可以在不同的处理器上同时地进行。这就是并发。


并发与并行

并行也并不总是运行的很快,因为并行运行的组件可能需要彼此通信。例如,在浏览器的案例中,当文件下载完成之后,就需要通知用户,弹框提示。此时,在负责处理下载的组件和负责处理页面请求的页面中,就需要进行通信。在并发的系统里面,像这种组件间的通信的开销不大,但是若是在并行的系统上,这种通信的开销就高了。因此,并行程序并不总能运行的较快。

Go对并发的支持

并发是Go语言内置的特性。Go使用Goroutine和channel来处理并发问题,在接下来的文章中,我们将详细地讲解他们。以上这些就是并发的介绍。

感谢您的阅读,请留下您珍贵的反馈和评论。Have a good Day!

备注
本文系翻译之作原文博客地址

相关文章

网友评论

      本文标题:Go教程第十七篇: 介绍并发

      本文链接:https://www.haomeiwen.com/subject/zshvghtx.html