面向并发编程

在我们的系统中,并发扮演着核心角色,它是如此核心以至于我塑造了面向并发编程(Concurrency Oriented Programming)这个术语,以把这种编程风格和其他编程风格区分开来2。
在面向并发编程中,程序的并发结构应该遵循应用本身的并发结构。这种编程风格特别适用于编写那些对现实世界建模或与现实世界进行交互的应用程序。
面向并发编程同样也具有面向对象编程的两个主要优点。即多态(polymorphism)以及使用预先定义的协议使得不同进程类型的实例之间可以具有相同的消息传递接口。

当我们把一个问题分解成许多并发进程的时候,我们可以让所有的进程响应同一种消息(即多态),并且可以让所有的进程都遵循相同的消息传递接口。
并发一词是指同时发生的活动集合。现实世界就是并发的,是由无数同时发生的活动组成的。在微观上看,我们自己的身体就是由同时运动着的原子、分子组成的。从宏观上看,整个宇宙也是由同时运动着的星系组成的。
我们做一件简单的事情的时候,譬如在高速公路上开车时,我们能觉察到身边行驶着飞速的车流,但是我们一样能够完成开车这一复杂的任务,并且可以不假思索就避开潜在的危险。
在现实世界中,顺序化的(sequential)活动非常罕见。当我们走在大街上的时候,如果只看到一件事情发生的话我们一定会感到不可思议,我们期望碰到许多同时进行的活动。
如果我们不能对同时发生的众多事件所造成的结果进行分析和预测的话,那么我们将会面临巨大的危险,像开车这类的任务我们就不可能完成了。事实上我们是可以做那些需要处理大量并发信息的事情的,这也表明我们本来就是具有很多感知机制的,正是这些机制让我们能够本能地理解并发,而无需有意识地思考。
然而对于计算机编程来说,情况却突然变得相反。把活动安排成一个顺序发生的事件链被视为是一种规范,并认为在某种意义上讲这样更简单,而把程序安排成一组并发活动则是要尽可能避免的,并常常认为会困难一些。
我相信这是由于几乎所有传统的编程语言对真正的并发缺乏有力支持造成的。绝大多数的编程语言本质上都是顺序化的;在这些编程语言中所有的并发性都仅仅由底层操作系统来提供,而不是由编程语言来提供。
在本论文中,我展现了这样的一个世界,其中并发是由编程语言来提供的,而不是由底层操作系统来提供。我把对并发提供良好支持的语言称为面向并发的语言(Concurency Oriented Language),简称COPL。

posted on 2014-05-14 14:34  Lishenyin  阅读(447)  评论(0编辑  收藏  举报

导航