并发(concurrent):是在一台处理器上“同时”处理多个任务。
并行(parallel): 是在多台处理器上同时处理多个任务。
所谓“同时”进程:
我们现在使用的windows操作系统,是可以“同时”做很多件事儿的。比如我们可以一边看电影,一般聊QQ;一边听歌,一边打游戏。
但是,这所谓的“同时”,在操作系统底层可能并不是真正的意义上的“同时”。
实际上,对于单CPU的计算机来说,在CPU种,同一时间是只能干一件事儿的。为了看起来像是“同时干多件事”,Windows这种操作系统是把CPU的时间划分成长短基本相同的时间区间,即“时间片”,通过操作系统的管理,把这些时间片依次轮流地分配给各个应用使用。
这样,给用户的感觉是它同时的进行听歌和打游戏,实际上,在操作系统中,CPU是在游戏进程和音乐播放器进程之间来回切换的。
操作系统时间片的使用是有规则的:某个作业在时间片结束之前,整个任务还没有完成,那么该作业就被暂停下来,放弃CPU,等待下一轮循环再继续做。此时CPU又分配给另一个作业去使用。
我们把目光聚焦在CPU的执行上,把整个过程放大的话,CPU就好像是一个电话亭。多个用户并不是同一时间在使用这个电话亭中的电话的,而是轮流使用的。
由于计算机的处理速度很快,只要时间片的间隔取得适当,那么一个用户作业从用完分配给它的一个时间片到获得下一个CPU时间片,中间有所“停顿”,但用户察觉不出来。
所以,在单CPU的计算机中,我们看起来“同时干多件事”,其实是通过CPU时间片技术,并发完成的。
并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。
就像前面提到的操作系统的时间片分时调度,打游戏和听音乐两件事情是在同一个时间段内都是在同一台电脑上完成了从开始到结束的动作。那么,就可以说听音乐和打游戏是并发的。
并行,当系统有一个以上CPU(处理器)时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进行,两个进行互不抢占CPU资源,可以同时进行,这种方式我们称之为并行。