并发:是指在时间上重叠的逻辑流。在单核处理器上各逻辑流并不是真正意义上的并行,只是内核提供给我们的错觉,好似我们这条逻辑流正独占CPU。
为了更好理解,见下图:
假设内存中有A,B,C,D四道程序,各自拥有自己的逻辑控制流。在单核处理器中,只有一个物理程序计数器,因此在每个程序运行时,它的逻辑程序计数器被装入实际的程序计数器(pc,保存着CPU要执行的下一条指令所在的内存地址)中,运行一段时间后,或该程序执行结束,或CPU的调度程序保存当前进程上下文,恢复要执行的进程上下文,其中就包括将该进程的逻辑程序计数器装入实际程序计数器中。如图所示,在观察足够长的一段时间后,我们会发现所有的进程都运行过了,但在任何一个给定的瞬间仅有一个进程在真正的运行。
并行:在多处理器上的并发表现,但此时有多个处理器,也就是有多个物理程序计数器,此时就可以同时装载不同控制流指令,至此多控制流达成了真正意义上的并行执行。
打个不是非常恰当的比喻,但也可以从中看出并发与并行的明显区别:
你正在吃饭的时候有一通电话打进来,你放下碗筷去接电话,电话打完后回来继续吃,这叫并发;
你正在吃饭的时候有一通电话打进来,你左手拿着电话,右手拿着筷子夹着菜,这就叫并行。