面向并行开发的“小众”语言——Erlang

来源:互联网 发布:朱元璋真实长相知乎 编辑:程序博客网 时间:2024/05/21 19:40

提起Erlang语言,相信许多人都会挠头,因为它实在是太陌生了。在2007年6月由TIOBE Programming Community提供的程序语言排名中,Erlang占有率为0.080%,排名第49位。与之形成鲜明对比的是,Java以20.025%的占有率高居榜首,紧随其后的是C(15.967%)、C++(11.118%)、VB(9.332%)、PHP(8.871%)、Perl(6.177%)、C#(3.483%)、Python(3.161%)、JavaScript(2.616%)、Ruby(2.132%)。

相对于传统老牌“大佬”语言相比,Erlang语言绝对算得上是一种“小众”语言,但其未来的发展前景却是无法估量的,因为它可以解决传统语言很难解决的并行计算中的难题。Erlang是一种函数式(变量只能赋值一次)、强类型、动态类型(变量类型在运行时决定,代码需要编译后才能执行,与Python,Ruby等不一样)、面向并发(Concurrency Oriented)的语言。《程序员》杂志曾在去年9、10两期杂志中对Erlang语言进行了介绍,《一场茶杯里的风暴》和《轻松实现可伸缩性,容错性,和负载平衡的大规模多人在线系统》。下面内容为两文中对Erlang的一些介绍。

Erlang最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适合于构建分布式,实时软并行计算系统。使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅只是一两个环节,比起C程序的线程切换要高效得多得多了。使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断的情况下更新。另外如果你需要更高效的话,字节代码也可以编译成本地代码运行。

内建的并行计算模型使得Erlang非常适合编写多人在线服务器。具有良好伸缩性的大型多人后台系统用Erlang是这样构建的:由很多被分配不同任务的“节点(Node)”组成的“集群(Cluster)”。一个Erlang节点就是一个Erlang虚拟机的实例,你可以在一台机器(服务器,台式机或者笔记本电脑上运行多个节点。Erlang节点自动跟踪所有连接着的其他节点。要添加一个节点你仅仅需要把它指向任何一个已建节点就可以了。只要这两个节点建立了连接,所有其他的节点马上就会感应到新加入的节点。Erlang进程使用进程ID向其他进程传递报文,进程ID包含着运行此进程的节点的信息。因此进程不需要理会正在与其交流的其他进程实际在何处运行。一组相互连接的Erlang节点可以看作是一个网格计算体或者一台超级计算机。将大型多人在线游戏里的玩家,NPC以及其他个体抽象为很多并行运行的进程是最理想的,但是通常并行运算的实现让人十分头疼。Erlang天生就是简化并行计算的实现。Erlang语法里的比特操作让二进制操作变得异常简单,极大发挥了Perl和Python的打包/解包结构。使得Erlang非常适合操作二进制网络通讯协议。

 

附录:Erlang资料
Erlang官方网站,建议订阅其邮件列表
http://www.erlang.org/

分布式、并行计算语言Erlang 学习笔记
http://computebank.spaces.live.com/blog/cns!955689A6CF175077!326.entry
http://computebank.spaces.live.com/blog/cns!955689A6CF175077!356.entry
http://computebank.spaces.live.com/blog/cns!955689A6CF175077!439.entry

Erlang论坛
http://groups.google.com/group/erlang-china

Yariv's Blog: Adventures in Open Source Erlang
http://yarivsblog.com/

Erlang + Yaws vs. Ruby on Rails
http://yarivsblog.com/articles/2006/07/11/erlang-yaws-vs-ruby-on-rails

Erlang写的服务器Yaws,据说并发能是apache的15倍
http://yaws.hyber.org/

Jabber: Open Instant Messaging and a Whole Lot More, Powered by XMPP
http://www.jabber.org/

一个Erlang的Jabber服务器实现
http://ejabberd.jabber.ru/
 

原创粉丝点击