
1.1.5 并发编程和并行编程有什么区别?
并发(Concurrency)和并行(Parallelism)这两个概念在多任务处理领域经常被对比讨论。尽管这两个术语在日常用语中有时被交替使用,但在计算机科学中,它们有着明确且不同的含义。
(1)并发。
并发是指系统能够同时处理多个任务的能力。并发的重点在于任务的处理过程,而不是执行。并发涉及同时处理多个任务的能力,但这不一定意味着这些任务实际上是在同一时刻执行的。在单核CPU上,一个CPU可以通过任务间的快速切换,给用户一种多个任务同时执行的错觉。并发更多关注的是结构上的分解,即如何有效地组织程序以同时处理多个任务。
比如,操作系统中存在多任务处理,即使在只有一个CPU内核的计算机上,仍然可以同时浏览网页、播放音乐和编写文档。操作系统通过将CPU资源切片并分配给各个程序,使之能够并发运行,从宏观上看,这些程序似乎是在同时执行的,但是在CPU上它们实际上是串行执行的。
(2)并行。
并行是指多个CPU或计算机同时执行多个任务或工作负载的能力。并行的重点是性能,它通过同时执行多个操作,减少完成工作的总时间。并行需要使用多个CPU或计算机,其中每个CPU或计算机执行任务的不同部分。
例如,我们在使用多个CPU进行科学计算时,其中一个任务是计算一个大型数据集中所有元素的总和,那么这个任务可以被分割成更小的部分,每个部分分配给一个CPU,多个CPU同时计算。随后,所有CPU的计算结果被汇总以获得最终总和,这种方式显著减少了完成计算所需的总时间。
(3)并发编程和并行编程的区别。
了解并发和并行的概念后,我们应该知道,并发编程和并行编程也是多线程编程的两个概念,它们在Java中都有应用,但各自的侧重点和使用场景有所不同。
● 并发编程是关于如何利用有限的CPU资源高效地管理和调度多个任务,这些任务可能不会真正同时执行,但通过任务间的快速切换给用户以同时执行的错觉。
● 并行编程是关于如何将任务分配到多个CPU上,以便真正同时执行,从而提高程序的运行效率。
并发和并行都是现代计算中提高效率的关键概念,它们使得程序能够更加高效地利用资源。在多个CPU的环境下,并发和并行经常一起使用,以实现最大的效率和性能。在Java中,这两个概念也是交织在一起的,一个并发程序可以通过在多个CPU上并行执行多个线程来提高性能。然而,并发编程侧重于线程之间的协调和同步,而并行编程则侧重于线程的同时执行和性能提升。