正如@Raphael指出的那样,分布式计算是并行计算的子集;反过来,并行计算是并行计算的子集。
并发是指共享同一时间范围内的资源分配。例如,多个进程共享相同的CPU(或CPU内核)或共享内存或I / O设备。操作系统管理共享资源。多处理器机器和分布式系统是并发控制起着重要作用的体系结构。并发发生在硬件和软件级别。多个设备同时运行,处理器具有内部并行性,并且可以同时处理多个指令,系统具有多个处理器,并且系统通过网络通信进行交互。并发发生在应用程序级别的信号处理,I / O和处理的重叠,通信以及进程之间或同一进程中线程之间的资源共享中。
在同一系统上执行的两个进程(或线程)是可以并发执行的,它们是并发的:进程(线程)共享CPU资源。我喜欢以下定义:在且仅当第二个进程(线程)在第一个进程(线程)尚未终止执行时才开始执行时,在同一系统上执行的两个进程(线程)才是并发的。
当进程(或线程)在不同的CPU(或同一CPU的内核)上执行时,并发变为并行。在这种情况下,并行性不是“虚拟”,而是“真实”。
当这些CPU属于同一台机器时,我们将计算称为“并行”;当CPU属于不同的计算机时,可能会在地理位置上分散,因此我们将计算称为“分布式”。
因此,分布式计算是并行计算的子集,并行计算是并行计算的子集。
当然,总的来说,并行计算和分布式计算是不同的。并行计算与紧密耦合的应用程序有关,用于实现以下目标之一:
- 更快地解决计算密集型问题;
- 在相同的时间内解决较大的问题;
- 在相同的时间内以更高的精度解决相同尺寸的问题。
Tx5xTxx但使用更复杂的模型,更多的方程式,变量和约束条件,则具有更高的准确性)。并行计算可以使用共享内存,消息传递或两者(例如,使用OpenMP的共享内存节点,使用MPI的消息传递节点);它也可能使用GPU加速器。由于应用程序在一台并行超级计算机上运行,因此我们通常不考虑诸如故障,网络分区等问题,因为从实际的角度来看,这些事件的可能性接近于零。但是,诸如气候变化模拟之类的大型并行应用程序可能会运行数月,通常会遇到故障,因此应使用检查点/重新启动机制来避免出现问题时从头开始重新进行模拟。
分布式计算与松散耦合的应用程序相关,其中(分布式超级计算)的目标是解决其他问题,否则问题可能太大,或者其执行可能会分散在不同的组件上,这可能会受益于在不同体系结构上的执行。有多种模型,包括客户端服务器,对等网络等。在设计时必须考虑分布式计算中出现的问题,例如安全性,故障,网络分区等,因为在这种情况下,故障是规则和原则。也不例外。
最后,网格和云计算都是分布式计算的子集。网格计算范式作为一种新领域而出现,它不同于传统的分布式计算,因为它专注于大规模资源共享和创新的高性能应用程序。共享的资源通常属于多个不同的管理域(所谓的虚拟组织)。在过去的十年中,网格计算虽然被科学家大量使用,但传统上对于普通用户而言却很困难。云计算试图通过允许普通用户利用虚拟机轻松利用位于同一数据中心同一位置且不在地理上分散的多台计算机来弥合差距可以由用户组装以运行其应用程序。由于硬件的原因,特别是通常缺乏高性能网络互连(例如Infiniband等),云并不是运行并行MPI应用程序的目标。通常将在云上运行的分布式应用程序实施为利用Map / Reduce范式。顺便说一下,许多人将Map / reduce视为并行数据流模型。