并发入门

并发入门

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

欢迎来到第 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

相关推荐

  • pvchange

    文章目录pvchange补充说明语法选项参数实例 pvchange 修改物理卷属性 补充说明 pvchange命令 允许管理员改变物理卷的分配许可。如果物理卷出现故障,可以使用pv…

    入门教程 2024年 3月 1日
  • Java 开发环境配置

    在本章节中我们将为大家介绍如何搭建Java开发环境。 Windows 上安装开发环境 Linux 上安装开发环境 安装 Eclipse 运行 Java 文章目录window系统安装…

    2023年 3月 4日
  • mtools

    文章目录mtools补充说明语法选项实例 mtools 显示mtools支持的指令 补充说明 mtools命令 显示mtools支持的指令,mtools为MS-DOS文件系统的工具…

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

    文章目录php补充说明语法选项参数 php PHP语言的命令行接口 补充说明 php命令 是流行的Web开发语言PHP的命令行接口,可以使用PHP语言开发基于命令行的系统管理脚本程…

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

    文章目录volname补充说明语法参数 volname 显示指定的ISO-9660格式的设备的卷名称 补充说明 volname命令 用于显示指定的“ISO-9660”格式的设备的卷…

    入门教程 2024年 3月 11日
  • vgextend

    文章目录vgextend补充说明语法选项参数实例 vgextend 向卷组中添加物理卷 补充说明 vgextend命令 用于动态扩展LVM卷组,它通过向卷组中添加物理卷来增加卷组的…

    入门教程 2024年 3月 11日
  • dpkg-reconfigure

    文章目录dpkg-reconfigure补充说明语法选项参数实例 dpkg-reconfigure Debian Linux中重新配制一个已经安装的软件包 补充说明 dpkg-re…

    入门教程 2023年 12月 7日
  • iOS SQLite数据库

    文章目录简介实例步骤输出 简介 在IOS中使用Sqlite来处理数据。如果你已经了解了SQL,那你可以很容易的掌握SQLite数据库的操作。 实例步骤 1、创建一个简单的View …

    2023年 4月 1日
  • HTML 属性

    属性是 HTML 元素提供的附加信息。 文章目录HTML 属性属性实例实例HTML 属性常用引用属性值HTML 提示:使用小写属性HTML 属性参考手册 HTML 属性 HTML …

    2023年 4月 11日
  • 前言

    HTTP 协议一般指 HTTP(超文本传输协议)。 超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信…

    2023年 5月 14日
Translate »