试着聊聊并发和并行

我们都知道电影就是依据人眼的视觉停留的特点而发明的,在一秒钟内切换超过24张连拍的静态图片人们就看不到切换图片期间的黑色间隔,从而达到动态的视觉效果。
所以,人类是很容易“欺骗”的,嘴上不承认,身体却很诚实地接纳了。

早期的计算机是单处理器系统,操作系统也是不支持多任务的。
后来出现了分时多任务系统,它采用了时间片轮转的方式,在一定的时间间隔内响应多个用户的操作。
类似电影,如果这个响应间隔可以做到足够小,那么用户就会觉得他在独占这台计算机。

比较著名的分时多任务系统就是 UNIX,而那个时候还没有多核处理器。于是,分时多任务处理的设计一直被操作系统设计者沿用至今。
接下来,我们该聊聊并发 (Concurrency) 了。
我没有找到关于并发的标准定义,但是我阅读过K&R的 UNIX 论文,我相信并发就是源自于分时多任务的理念。
它强调同一时间段有多个任务在同时进行。

直到后来,随着 CPU 技术的升级,我们迎来了多核处理器。
人们设想可以将任务分割成N多份子任务,然后交给多个处理器核心去运行,最后再整合处理结果。
这个效果非常接近硬件系统的组成,硬件系统一般由多个独立的工作模块或者局部电路组成,他们可以在同一时间点互不干扰地工作,最后通过并行接口传输的时候也是互不干扰的。
整个工作期间它们可以做到完全地同时。
所以,软件术语中的并行可以理解成硬件系统的并行效果,它的英文(Parallelism)也很类似并行接口(Paralle Port)的英文。

以前我自己也总是理不清这些术语,我希望您在阅读本文之后既可以正确地说出英文术语,也真正理解了它们。