Go 语言并发--高级概述

        对于许多不处理并发程序的人(甚至也包括一些需要处理并发程序的人)来说,并发 (concurrency) 与并行 ( parallelism )就是一回事。在日常口语中,人们通常对它们并不加以区分,但计算机科学家和软件工程师之所以如此重视开发和并行的区别,是有一些明显原因的。

1. 并发和并行

        曾经有一段时间,并发和并行在计算机科学中意味着一回事,但那个时代现在已经一去不复返了。许多人会告诉你并发不是什么:“并发不是并行” ,但是当谈到并发是什么时,只有一个简单的定义通常会令人费解。并发的不同定义给出了该概念的不同方面,因为并发并不是现实世界的运作方式。现实世界是并行的。我将尝试总结一些并发背后的核心思想,希望你能够充分理解它的抽象本质,以便能够应用它来解决实际问题。

        我们周围的许多事物都是同时独立运作的。你周围可能有人只管自扫门前雪,有时他们也会与你以及彼此之间进行互动。所有这些事情都是并行(parallel) 发生的,因此并行性是思考多个独立事物之间相互作用的自然方式。

        你如果观察某个人在一群人中的行为,就会发现事情是更加有顺序的 (sequential):这个人在做完一件事之后再做另一件事,并且可能与群体中的其他人进行互动,所有这些都是按顺序进行的。这非常类似于分布式系统中多个程序之间的交互,或多线程程序中一个程序的多个线程之间交互。

        在计算机科学中,人们普遍认为并发性的研究始于 Edsger Dijkstra 的工作,特别是他于 1965 年发表的题为 《并发编程控制问题的解决方案》的仅有一页纸的论文。这篇论文讨论了一个涉及 N 台计算机共享内存的互斥问题。这是一个非常巧妙的描述,强调了并发和并行之间的区别:它谈到了 “并发编程” (concurrent programming) 和 “并行执行” (parallel execution)。并发与程序的编写方式有关,而并行则与程序的运行方式有关。

        尽管这在当时主要是一项学术活动,但并发领域多年来不断发展,并延伸到许多不同但相关的分支主题,包括硬件设计、分布式系统、嵌入式系统、数据库和云计算等。由于硬件技术的进步,它现在已成为每个软件工程师必备的核心技能之一。

        如今,多核处理器已成为常态,它们本质上是封装在单个芯片上的多个处理器,通常共享内存。这些多核处理器用于为基于云的应用程序提供支持的数据中心,在这些应用程序中,某人可以在几分钟内配置通过网络连接的数百台计算机,让它们为应用程序工作,并在工作负载完成后销毁应用程序进程。

        相同的并发原则也适用于在分布式系统的多台机器上运行的应用程序,在笔记本计算机的多核处理器上运行的应用程序,以及在单核系统上运行的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mindfulness code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值