现在的位置: 首页 > 综合 > 正文

Erlang简介

2013年09月18日 ⁄ 综合 ⁄ 共 2595字 ⁄ 字号 评论关闭

Erlang的介绍比较散,又都很简单,所以多找点汇总一下:

----------------------------------------------
我的印象:

Erlang是一门FP语言,通常FP语言都不是OO语言,语法和prolog有些象,大量使用pattern match来简化编程,使用伪进程简化并发处理,也有拿它做AI的。一个简单的例子,从socket接收一个数据包,包括一个int字段,一个short字段,如何封/解包?Erlang的Bit syntax可以轻松地通过match做到:
1> Pack = <<1:32, 2:16>>.
<<0,0,0,1,0,2>>
这样就完成了把1和2分别用32位、16位打包,当然也可以使用非整数字节:
1> Pack = <<1:13, 2:19>>.
<<0,8,0,2>>
解包也很简单:
2> <<Field1:13, Field2:19>> = Pack.
<<0,8,0,2>>
3> Field1.
1
4> Field2.
2
这种就是match,通过匹配语法达到验证并赋值的目的,从语法上简化了编程。

FP就不多介绍了,在做算法时FP总是能够以更少的代码更直观的实现。

Erlang支持并发和分布,用少量线程(通常和CPU数相同)来调度大量的轻量级伪进程,底层实现都是异步的,因此在处理高并发时非常高效。

Erlang的语言效率大概是C的1/5,比python快一倍。在处理高并发时,用C实现通常非常难写,并且效率不高,apache等web server就是例子。使用erlang,相当于把整个程序置于异步框架之下,却能享受同步处理的便利。

Erlang的伪进程可以类比为Windows的Fiber、Stackless Python等其它Coroutine设施。
----------------------------------------------
摘自:http://computebank.spaces.live.com

Erlang是由爱立信公司开发的一种平台式语言,可以说是一种自带了操作系统平台的编程语言,而且在这个平台上实现了并发机制、进程调度、内存管理、分布式计算、网络通讯等功能,这些功能都是完全独立于用户的操作系统的,它采用的是类似于Java一样的虚拟机的方式来实现对操作系统的独立性的。

介绍一下Erlang先:

1、并发性:Erlang的轻量级进程可以支持极高的并发性,而且在高并发的情况下内存使用相当的少。Erlang的并发性并不会受到宿主操作系统并发性的限制。

2、分布式:最开始Erlang的设计目标就是实现分布式环境,一个Erlang的虚拟机就是一个Erlang网络上的节点。一个Erlang节点可以在另一个Erlang节点上创建自己的并发进程,而子进程所在的节点可能是运行其他的操作系统的服务器。不同节点的之间的可以进行极为高效而又精确的通信,就像它们运行在同一个节点一样。

3、鲁棒形:Erlang内部建设有多种错误检测原语。我们可以通过这些原语来架设高容错性的系统。例如,一个进程可以监视其他进程的状态和活动,即使那些被监控的进程处于其他节点。在分布式状态下,我们可以把系统配置成具有Fail-over功能的分布式系统。当有其他节点出错的时候,系统会把他的运行场景自动快速的切换备份节点上。Erlang支持9个9的级别的故障率,一年只有几分钟的故障时间。

4、软实时:Erlang是一个“软”实时系统(Soft Real Time),它可以提供毫秒级别的响应。

一般的情况下,使用Erlang系统可以比其他系统的并发能力(例如Web会话负载)放大20~30倍
----------------------------------------------
摘自:http://wiki.huihoo.com/index.php?title=Erlang_programming_language

Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适合于构建分布式,实时软并行计算系统。

使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅只是一两个环节,比起C程序的线程切换要高效得多得多了。

使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。

Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断的情况下更新。另外如果你需要更高效的话,字节代码也可以编译成本地代码运行。
----------------------------------------------
摘自:http://blog.csdn.net/g9yuayon/archive/2006/09/12/1210906.aspx

Erlang能够创建和管理大量的进程(不是操作系统级别的)。那些进程在不同的操作系统上有同样的行为,可以被垃圾回收,对运行地点透明(location transparent),不会破坏其它进程的运行。任意两个进程间完全独立,不共享任何状态,一切交流通过消息来传递,当然也就无需上锁。这样的设计思想造就了适合解决如下问题的Erlang:
§      系统高度并发 - 支持几十万个并行行为
§      实时处理
§      计算高度分布
§      系统要求高度可靠:每年的脱机时间以分钟算,甚至永不当机
§      系统高度复杂:代码量以百万行计
§      持续操作:以年计
§      系统要求持续在线更新。
----------------------------------------------
这里有一篇erlang开发的web服务器yaws和apache的比较文章:http://www.sics.se/~joe/apachevsyaws.html

注意apache在并发4000连接时就已经趴下了,yaws达到了并发8万连接。
----------------------------------------------
待续。。。。
----------------------------------------------

抱歉!评论已关闭.