计算机科学的咬文嚼字:“并行”与“并发”

很长时间没来打理过这个博客了, 在此记录一些思考。
中文计算机资料的质量一直堪忧,我认为这一定程度上和术语不清晰,缺乏良好的翻译有关。这可能是因为计算机科学还是一个年轻的学科,人们对此还不够重视。我在这里整理一些我自己的思考。

1. “并行”与“并发”

大部分语境下, 并行,是parallel(形容词) parallelism(名词)的翻译,并发 是concurrent(形容词) concurrency(名词)的翻译。

虽然我们在算法竞赛里只考虑单个程序单个执行流的算法,但是在现代计算机系统(CPU, 操作系统)中,同时运行多个程序是一项很基本的能力,因此我才能一边听音乐(对电脑来说,使用多媒体外设),一边挂着微信(保持网络连接),一边写博客(交互性的文字处理)。

而并行和并发,粗略来说,都是“同时运行”的一种描述,但是它们是不同的概念。有人专门做了“concurrency is not parallelism”的演讲。(https://talks.golang.org/2012/waza.slide#1)

我们来想一想,计算机如何“同时”执行多个程序?很多人立刻会想到多核(multicore)。现在intel的CPU都有“4核8线程”之类的参数,可以理解为他是一块芯片/处理器上集成了4个运算单元,支持同时运行8个线程(thread)(程序执行的基本单元,可以理解为同时执行8个独立的程序)。但是,稍微想一想就会发现,我们常常会同时运行不止8个程序。实际上,打开windows的任务管理器,你会发现我们使用的每个应用程序都有多个线程,例如浏览器每打开一个标签页就占据一个线程(这容易理解,我们可以认为访问、显示不同的网页是在执行不同的程序),同时运行的线程数目以千计(2020.3.30的典型笔记本电脑的数据)。而我们的4核,8核,比起来是这么的少!甚至你会发现,很多单核的计算机性能强劲,也可以一边听音乐,一边挂着微信,一边写博客!这是怎么回事?很显然,计算机并不仅仅依靠“多个核同时运行程序”来实现“多个程序同时运行”。

问题的关键在于:现代CPU的主频(虽不准确,但你可以大致理解为1秒所能执行的指令数)达到GHz级别,而人的反应速度太慢了!

你也许听过一个故事:苍蝇眼里的电视是放映缓慢的幻灯片。(https://m.guokr.com/article/437410 )因为电视主流帧率是25、30帧,也就是1秒内播放25或30张静止画面,通过和走马灯一样的“视觉暂留”原理(或者说,趁人眼人脑还没反应过来),让人以为自己观看的是动画。而苍蝇的眼睛和神经系统感知闪光的速度是人类的四倍多,怪不得你徒手很难打到苍蝇。

而计算机系统也利用这一点,在我缓慢地打字的时候,它会在反应过来之前,偷偷干点别的活,再回来处理我的键盘输入,我却完全察觉不到。毕竟,即使计算机在处理我的输入的时候耽搁了一会,这个耽搁最多也就是毫秒级别的。
因此,我们可以说,计算机“同时”执行程序,并不是物理上“同一时刻有多个程序在执行”,而是“同一时间段里交替执行了多个程序”。但是,“同一时刻有多个程序在执行”也是经常发生的事情,这包括CPU多个核上有多个程序在执行,也包括一个CPU可以在一个时钟周期内执行多条指令(所谓的超标量(superscalar) CPU)。一般的技术书籍,都把“物理上同一时刻有多个程序、指令在执行”叫做并行(parallelism), 而把“人类感觉上有多个程序在执行,一个程序还没结束的时候另一个程序已经开始执行,常常通过快速在不同程序之间切换来实现”的特性叫做并发(concurrency)

到此,我们似乎可以说,并行和并发是不同的概念,对应parallel和concurrent。

但是,为什么“并行”对应parallel, 而“并发”对应concurrent?我们能不能把“并行”和“并发”的含义交换?实际上,台湾把parallel computing译作“平行计算”,取parallel在英文有“平行线”的含义,而把concurrent译作“并行”。
思考:如果把“发”理解为“出发”“发动”,把“行”理解为“进行”“执行”,那么确实符合我们对“并发”“并行”的理解。并发,是多个程序同时(可能略有先后)出发,但不一定同时执行,可能程序A走一步,停下来,然后程序B再走一步。并行,则要求必须多个程序同时执行。我不敢说这个理解是最合适的,也不知道最早翻译“并行”“并发”这两个词的前辈是怎么想的(其实翻译这两个词的前辈在2020年很可能还在世),但我觉得我给的这个解释可以说服我自己,也有助于“并发”“并行”这两个词语真正含义的理解和记忆。希望对这两个词的词源有更多了解的人能够告诉我, 不胜感激。

posted @ 2020-03-30 16:19  liu_runda  阅读(238)  评论(0编辑  收藏
偶然想到可以用这样的字体藏一点想说的话,可是并没有什么想说的. 现在有了:文化课好难