并发与并行
并发是两个任务可以在重叠的时间段内启动,运行和完成;并行是任务在同一时间运行,例如,在多核处理器上。
并发是独立执行过程的组合,而并行是同时执行(可能相关的)计算。
并发是一次处理很多事情,并行是同时做很多事情。
应用程序可以是并发的,但不是并行的,这意味着它可以同时处理多个任务,但是没有两个任务在同一时刻执行。
应用程序可以是并行的,但不是并发的,这意味着它同时处理多核CPU中的任务的多个子任务。
应用程序可以即不是并行的,也不是并发的,这意味着它一次一个地处理所有任务。
应用程序可以即是并行的也是并发的,这意味着它同时在多核CPU中同时处理多个任务。
综上总结,可以看出,并行要比并发更难得,对于单CPU来说,除了指令级别的并行,其他情况并不能实行精确的并行。
并发的意义
1.有时并发确实能在同一时间间隔内完成更多的任务,也就是有利于增加任务的吞吐量。因为在单CPU的情况下,并不是所有的任务在进行的每时每刻都使用CPU,也许还要使用IO等设备。而在多CPU或者多台计算机组成的集群的情况下,就更不用说了。
2.并发有利于简化程序解决方案。有时把问题的解决方案看作一组并发执行的任务更合理。这是模拟现实场景的自然方式。
3.有时对于效能而言速度处于次要地位,采用并发性是为了使软件在相同的时间间隔内做更多的工作。比如一个网站支持多少个用户同时访问。
4.最后,采用并发性可以简化软件,通常一系列较短的并发执行操作比一个较长的复杂的顺序操作更容易实现。并发使软件运行速度更快,处理更多的负载或简化程序的设计方案,其主要目标是软件优化,即采用并发性使软件性能更佳。
并发与分布式编程
并行和分布式编程是两种不同的、有时又相互交叉的编程范例。
并行编程技术将程序必须处理的作业分配给一个物理或虚拟计算机内的两个或者多个处理器;而分布式编程技术则一般是将作业分配给集群内的不同计算机的一个或者多个处理器。从这个角度讲,分布式编程的范围要比并行编程范围更大。
并行程序可以分成进程或者线程实现;分布式程序仅能分成进程实现。
在技术上,并行程序有时候是分布式的,例如PVM编程;分布式编程有时用于实现并行性,例如MPI编程。 但并非所有的分布式程序都包括并行性,分布式程序的各部分可以在不同时间间隔内的不同时刻执行。
在纯粹的并行程序中,并发执行部分都是同一个程序中的部分; 在分布式程序中,并发执行的部分通常实现成分离的程序。