并发入门

并发入门

上一节:第十九篇 接口二
下一节:第二十一篇 协程

欢迎来到第 20 个教程。

Go 是并发式语言,而不是并行式语言。在讨论 Go 如何处理并发之前,我们必须理解何为并发,以及并发与并行的区别。

并发是什么?

并发是指立即处理多个任务的能力。一个例子就能很好地说明这一点。

我们可以想象一个人正在跑步。假如在他晨跑时,鞋带突然松了。于是他停下来,系一下鞋带,接下来继续跑。这个例子就是典型的并发。这个人能够一下搞定跑步和系鞋带两件事,即立即处理多个任务。

并行是什么?并行和并发有何区别?

并行是指同时处理多个任务。这听起来和并发差不多,但其实完全不同。

我们同样用这个跑步的例子来帮助理解。假如这个人在慢跑时,还在用他的 iPod 听着音乐。在这里,他是在跑步的同时听音乐,也就是同时处理多个任务。这称之为并行。

从技术上看并发和并行

通过现实中的例子,我们已经明白了什么是并发,以及并发与并行的区别。作为一名极客,我们接下来从技术的角度来考察并发和并行。:)

假如我们正在编写一个 web 浏览器。这个 web 浏览器有各种组件。其中两个分别是 web 页面的渲染区和从网上下载文件的下载器。假设我们已经构建好了浏览器代码,各个组件也都可以相互独立地运行(通过像 Java 里的线程,或者通过即将介绍的 Go 语言中的 [21.协程 ]()来实现)。当浏览器在单核处理器中运行时,处理器会在浏览器的两个组件间进行上下文切换。它可能在一段时间内下载文件,转而又对用户请求的 web 页面进行渲染。这就是并发。并发的进程从不同的时间点开始,分别交替运行。在这里,就是在不同的时间点开始进行下载和渲染,并相互交替运行的。

如果该浏览器在一个多核处理器上运行,此时下载文件的组件和渲染 HTML 的组件可能会在不同的核上同时运行。这称之为并行。

image

并行不一定会加快运行速度,因为并行运行的组件之间可能需要相互通信。在我们浏览器的例子里,当文件下载完成后,应当对用户进行提醒,比如弹出一个窗口。于是,在负责下载的组件和负责渲染用户界面的组件之间,就产生了通信。在并发系统上,这种通信开销很小。但在多核的并行系统上,组件间的通信开销就很高了。所以,并行不一定会加快运行速度!

Go 对并发的支持

Go 编程语言原生支持并发。Go 使用 [21.协程 ]()(Goroutine) 和信道(Channel)来处理并发。在接下来的教程里,我们还会详细介绍它们。

并发的介绍到此结束。请留下你的反馈和评论。祝你愉快。

若文章对你有帮助,可以点赞或打赏支持我们。发布者:Aurora,转载请注明出处:http://61.174.243.28:13541/AY-knowledg-hub/20-%e5%b9%b6%e5%8f%91%e5%85%a5%e9%97%a8/

(0)
AuroraAurora站点维系者
上一篇 2023年 12月 5日 下午5:51
下一篇 2023年 12月 5日 下午5:53

相关推荐

  • 环境设置

    如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 文章目录文本编辑器C++ 编译器安装 GNU 的 C/C++ 编译器UNIX…

    2024年 3月 18日
  • C++ 数据类型

    使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。 您可能需要存储各种数据类型(比…

    2024年 3月 18日
  • od

    文章目录od补充说明语法选项参数实例 od 输出文件的八进制、十六进制等格式编码的字节 补充说明 od命令 用于输出文件的八进制、十六进制或其它格式编码的字节,通常用于显示或查看文…

    入门教程 2024年 1月 23日
  • lp

    文章目录lp补充说明语法选项参数实例 lp 打印文件或修改排队的打印任务 补充说明 lp命令 用于打印文件,或者修改排队的打印任务。与lpr命令类似,lp命令既支持文件输入也支持标…

    入门教程 2023年 12月 19日
  • more

    文章目录more补充说明语法选项参数实例 more 显示文件内容,每次显示一屏 补充说明 more命令 是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持…

    入门教程 2024年 1月 3日
  • wget

    文章目录wget补充说明语法选项参数实例 wget Linux系统下载文件工具 补充说明 wget命令 用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网…

    入门教程 2023年 12月 27日
  • reboot

    文章目录reboot补充说明语法选项实例 reboot 重新启动正在运行的Linux操作系统 补充说明 reboot命令 用来重新启动正在运行的Linux操作系统。 语法 rebo…

    入门教程 2024年 3月 1日
  • who

    文章目录who概要主要用途选项参数返回值例子注意 who 显示当前所有登陆用户的信息。 概要 who [OPTION]… [file] [am i] 主要用途 当没有给出非选项…

    入门教程 2024年 1月 3日
  • bunzip2

    文章目录bunzip2补充说明语法选项参数实例 bunzip2 可解压缩.bz2格式的压缩文件。 补充说明 bzip2可以对文件进行压缩与解压缩。此命令类似于“gzip/gunzi…

    入门教程 2023年 12月 6日
  • zip

    文章目录zip补充说明语法选项参数实例问题解决 zip 可以用来解压缩文件 补充说明 zip命令 可以用来解压缩文件,或者对文件进行打包操作。zip是个使用广泛的压缩程序,文件经它…

    入门教程 2024年 3月 11日
Translate »