如果某个系统支持两个或者多个动作同时存在,那么这个系统就是一个并发系统。如果某个系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统。并发系统与并行系统这两个定义之间的关键差异在于"同时"这个词。
在并发程序中可以同时拥有两个或者多个线程。这意味着,如果程序在单核处理器上运行,那么这两个线程将交替的出入内存。这些线程是同时存在的,每个线程都处于执行过程中的某个状态。如果程序能够并行执行,那么一定是运行在多核处理器上。此时程序中的每个线程都将分配到一个独立的多核处理器上,因此可以同时运行。
并行概念是并发概念的一个子集。也就是说,你可以编写一个拥有多个线程或者进程的并发程序,但如果没有多核处理器来执行这个程序,那么久不能以并行的方式来运行代码。因此,凡是在求解单个问题时涉及多个执行流程的编程模式或者执行行为都属于并发编程的范畴。
你吃饭吃到一半,电话来了,你一直吃完了以后才去接,说明你不支持并发也不支持并行。
你吃饭吃到一半,电话来了,你停下来接了电话,接完以后继续吃饭,说明你支持并发。
你吃饭迟到一半,电话来了,你一边打电话一边吃饭,说明你支持并行。
并发的关键是你有处理多个任务的能力,不一定要同时。
并行的关键是你有同时处理多个任务的能力。
所以它们的关键点就是:是否是"同时"