链接:Basics: Parallel, Concurrent, and Distributed
原文作者:Mark C.Chu-Carroll
本文的诞生也不过得源于在我曾经开始谈论关于π演算 (π-calculus)时的帖子中所提出的问题,但是我认为这的确是有趣到足以置顶的帖子。如果听见某人谈论关于计算机和软件时,有三个词常常会出现在你的耳边:并行(parallel),并发(concurrent)和分布(distributed).乍一听,它们似乎指代的是同一类事物,但是实际上,它们是三类不同的事物,它们之间的差异举足轻重。
它们近似相通的地方是,都是描述计算机硬件和软件组成的系统体系结构,以达到同一时间处理多项任务的目的。不同的则是它们的实现方法及其原因。
并行(Parallel),或曰并行代码,或曰并行系统都是讨论有关如何使用现有系统,通过任务分片(breaking into pieces)技术使得所有的任务都可以同时运行,以期提高运行速度。所以假设你要执行某项复杂的任务:将执行A,B和C三个过程。A和B为C的运行分别进行准备,但是A,B之间不会相互干预。现在你可以先执行A,直到它执行完毕,然后执行B,等待B执行完毕,然后再去执行C。或者你有多余的CPU,你可以同时执行A和B,当它们执行完毕以后,执行C。当你编写一个在同一时间内运行多个程序片段以达到提升运行速度的程序时,你所做的就是并行。
并发(Concurrency)讨论关于系统存在多个子部分,其中每个部分设计的明确目的是为能够响应在同一时间内发生的事件,并不是为了提高运行速度,但却是系统功能不可或缺的一部分。科技博客(ScienceBlogs)的服务器端系统(The backend system)处理着大量的并发,因为它被设计为能支持成千上万的访问者同时阅读网页内容,也允许我们同时撰写和发布新文章而不会影响服务器系统的正常运行。如果对于系统来说在同一时间内支持大量事件同时发生是必须的功能,它所做的就是并发。
分布(Distribution)讨论关于由多个物理设备通过网络连接组成的系统。
它是一项基础性研究,目的在于研究如何组织构建依据需要拆分后位于各个不同实际位置,不同通信限定条件物理设备的系统。如果你有一个特别设计来在大量不同的物理硬件上同时运行各自程序的系统,但是它们某些情况下也是单独的系统,这就是分布式系统。
分别举例:
1.天气预报软件系统通常就是并行结构。通过对流体力学等的大量运算结果,得到精确的天气预测结果需要海量的运算量。将这些运算工作分发给大量CPU去执行,可以满足甚至高于基本的工作效率。
2.数据库系统通常被构建为并发结构。纠其原因是存在大量的数据并且大量连续的查询请求。当一个用户开始一个查询时,系统不会停下来进行某些操作直到该查询结束。而是允许大量的用户在同一时刻进行查询。大多数的数据库甚至保证如果一个用户正在执行更新操作,其他的用户仍然可以在更新未处理过程中执行并行查询,查询总是返回一个数据库更新前或者更新后一致的结果,绝不会返回两个结果。
3.分布式系统的例子类似writely(google提供的一个文档在线编辑,共享的web服务)这样的软件。它运行于网页浏览器中,使用writely你能够在浏览器中对文档进行编辑,并且可以与其他人共享的方式进行编辑,这样一来你可以拥有三个或者四个浏览器同时对文档进行编辑。就本系统而言每个浏览器运行自己的java应用程序来与服务器进行交互,并通过消息机制相互通信;它们没有任何修改文本操作的实际代码。服务器也没有任何关于类似绘制客户端界面的代码,服务器只负责与客户端通信,接收并处理来自客户端的编辑命令,并将更新信息送回,这样所有的用户界面都显示相同的内容。整个系统的设计实现思路围绕着这样的思想,这些不同的子系统都独立的运行在不同的机器之上。