2016年11月18日-20日,由CSDN重磅打造的年终技术盛会 —— “2016中国软件开发者大会”(Software Developer Conference China 2016,简称SDCC 2016)在北京京都信苑饭店隆重举行。本届大会云集了100多位国内外顶尖专家和技术大牛,共设新趋势和新实践2大主题会场,14场主题分论坛。面向国内外的中高端技术人员,聚焦最前沿技术及一线的实践经验,助力企业的技术升级和改造、全面提升技术人员的综合实力。
大家好,非常感谢今天有机会能和大家交流,这是我第一次来中国。今天我来谈谈一种编程方法,在过去的30年中,我一直在使用这种方法编程。以下是我今天演讲的主要内容:
Erlang的核心是基于开发软件的容错之上,pure message passing(纯消息传输)是一个进程模型,今天我想要分享的是以下几方面:
- 纯消息传输模型的优势
- 如何利用纯消息模型部署系统
- 具体的实现方式
- 关于学习并行编程的一些建议
你可以把计算机系统理解成一个黑匣子,我们不知道这个黑匣子里面到底发生过什么、不知道其中的编程语言、不知道运作机制。我们只知道如果向里面传递一些消息,系统会给我特定的反馈。我们希望达到的理想状况是,这个黑匣子里面的每一个模块能够独立的工作,任何一个模块的崩溃都不会影响到整个系统的运作。现在我们采取这样的一个逻辑,要建立大的东西,首先我们做很多小的东西,将小的东西组合在一起来得到大的东西,同时这些小单元的性质不应该被改变,这就是所谓的并行计算。
为什么要写并行程序?因为我们的世界就是并行的,现在我们所处的这个会议室里,有一千多个人,我们这里有一千个大脑都是并行的;走到大街上,你会发现有成千上万个并行程序同时发生。如果用串行算法来模拟这些场景的话,将会是非常困难的。
但是实际上,写并行程序也不简单,因此这也不是一个好的策略。我最喜欢用的策略是,写concurrent programs(同时发生的程序)。
下面我们来举个例子说明一下,如何编写同时发生的程序。例如,我们现在编写一个电梯控制系统,假设酒店一共有十层,配有三个电梯,那么我们将每一层楼、每一个电梯都用一个程序来模拟。对于每一个电梯而言,它只知道自己的运行状况,对其他电梯的运行状况一概不知。这时候如果你想要去8层,你只需要向这三个电梯询问它们到达8层所需的时间,并且从三个电梯的反馈中找出时间最少的一个就好了,就是这么简单。并行计算的优势在于,你“几乎不需要动脑筋”,你只需要模拟现实世界就好了。针对电梯和楼层的这些程序分布在不同的核当中,这些核应该足够快。你可以通过手动模拟来观察不同的核分布对于程序运行效率的影响,在1个核和10个核的电脑上运行,速度肯定是不同的,如果这个电脑上有100个核,那么不用对程序进行任何的改进,效率就可以提升75%。
以上数据体现了并行计算的简易性,下面我要强调的是,并行计算能够解决的高耦合的问题。当你发出一条信息,这条信息在不同的核之间处理、传递,假设这些核分布在不同的计算机上,这些计算机部署在不同的国家,有可能有的在地球上、有的在火星。这些计算机本身的编程方式是不同的,但是以相同的传输协议进行信息的传送,那么在这种情况下我们更需要一种统一的编程模式来对这些计算机进行统一。
而且还有一个问题,这些电脑如果有一个发生故障怎么办?对于发生故障的概率,我做了如下的计算:
最后,我希望能够帮助大家学习Erlang语言,因此我有一些非常好的读本想要推荐给开发者
非常开心能够和大家进行今天的分享。