欢迎来到天天文库
浏览记录
ID:10835936
大小:35.50 KB
页数:2页
时间:2018-07-08
《erlang风格的并行》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、我们常常能在Erlang的文档和源码之中看到UlfWiger这个名字,他是Erlang最初的开发者之一。最近他写了一篇博客《WhatisErlang-StyleConcurrency?》对于“Erlang风格的并行”发表了自己的看法,粗浅译来,给大家共享。现下时不时都能看到“用languageX来做Erlang风格的并行”这样的博客文章。我想这是好事,这表明大家都开始认真研究有关并行的问题了。然而,对于“Erlang风格的并行”这一术语,仍然缺乏一个权威的定义。我在这里尝试给出自己的定义。JoeArmstron
2、g在他的《ProgrammingErlang》中写了这么一段话:“在Erlang中:进程的创建和销毁非常迅速进程之间传递消息非常迅速进程的行为独立于操作系统进程可以有大规模使用进程之间彻底独立不共享内存进程之间交互的唯一途径就是消息传递”可以将这看作是一个“权威定义”,但稍嫌不够完整。我想再加上这么几条:消息传递是异步的进程可以彼此监控可以选择性的接收消息远程进程和本地进程基本保持一致上面的这些条目概略的描述了Erlang中并行的工作方式。那么,对于“Erlang风格的并行”,是否这些条目全都是不可或缺呢?也许
3、并非如此。我想下面的这些特性都是必须的:迅速的进程创建和销毁不费力的支持至少10K以上的并行进程迅速的异步消息传递复制的消息传递机制(无共享的并行)进程监控选择性的消息接收机制稍作解释:速度和伸缩性要让并行成为一种具有实用价值的基本建模手段,必须要让程序员能放心的创建解决问题所需的大量进程,而无需担心会因此而影响效率。若要以一句话来概况“Erlang风格并行”的精髓,那就是——它让你可以按照问题自身内在的并行模式来构建应用。如果认为创建进程代价高昂,程序员就会尽量重用已有的进程;如果认为消息传递代价高昂,就会发
4、明出其它的技术以避免传递消息。而这些手段通常是有害的(对于并行来说)。凡事都有自己的局限。Erlang被设计用来于做“代理风格”的并行,而不是大数据量的并行。在Erlang中你“只能”有约120M个并行进程,如果内存足够的话。我本人试过,在20M个并发进程时,Erlang仍然保持一贯的性能(我当时没有更多的内存可以继续尝试)。对于某些极端应用来说,(约5-10微秒)创建一个进程的代价仍嫌昂贵,但相比UNIX进程或POSIX线程,至少“廉价”了几个数量级。“Erlang风格的并行”在进程的粒度上,应与Erlang
5、大体保持一致。异步消息传递对于异步或者同步的消息传递,孰优孰劣曾经有过争论。的确,同步消息传递更易于理解。但在分布式的环境下,异步通讯(也就是所谓的“发送-祈祷”)则更符合直觉。基于同步消息传递的系统,在分布式的环境下也必须诉诸于某种形式的异步通讯机制,方可完成任务。尽管仍然存在争议,但无论如何异步消息传递仍是“Erlang风格并行”的一个特征。复制机制注意,这里的并不意味着说在所有的情况下都必须要完全复制所有的消息,重点不在方式,而在效果。这很重要,主要原因如下:从可靠性角度考虑,进程不能共享内存在分布的环境
6、下,复制不可避免,我们尽可能的在本地和远程的消息传递中都保持相同的机制要求进程之间不能共享任何东西,这可能太过严格,很有可能会将大部分的编程语言都被排除在“Erlang风格的并行”之外(甚至连Scala这样的语言都预留了在进程之间共享数据的可能)。那么好吧,我们至少应该说,Erlang风格使得用非共享的方式来实现并行要比共享方式更为容易。进程监控这是“边界外”错误处理机制的根基。在Erlang中,典型的错误处理哲学是——让它崩溃。其要义就在于,你的程序只处理正常情况,出现异常的情况则交由监控进程来负责处理。这么
7、做的结果是,在大型系统中,能漂亮的实现容错。选择性的消息接收有N中方法可以实现选择性的消息接收,但对于复杂的多路并行而言,你必须至少要支持其中的一种。在达致并发的路上,这一点很容易被忽视。简单的程序之中,你也不会很明显的感到它的必要,但若当你真正发现它的价值,你很可能已经被“复杂性爆炸”折磨很久了。我建议将选择性的消息接收机制列为Erlang风格并发的一个充分条件。它可以通过对单一消息队列进行匹配的方式(Erlang,OSEDelta)来实现,也可以通过多邮箱/频道的方式(Haskell,.Net,UNIX套接
8、字)来实现。选一个,找个合适的例子,演练它,体验它。如果你愿意,可以参照我的“StructuredNetworkProgramming”演示。—朴素的分隔线—注:跟随这个链接你会发现“Erlang-StyleConcurrency”正在迅速变成一个“即将臭大街”的名词,也许正是担心这种状况的出现,UlfWiger发表了这篇博客,对于一些声称自己是Erlang-Style的tricky,
此文档下载收益归作者所有