初识Erlang(1)

一直在微博看到淘宝褚霸在聊有关 Erlang 话题,十分好奇这到底是什么样一门语言,让淘宝大神攻城湿这么痴迷,昨天晚上下定决心,要花点时间去了解一下。今天早晨去图书馆借了一本《Erlang/OTP》并发编程,同时打开了Erlang 的官网: www.erlang.org,开始了我的Erlang之旅。经过一天的了解,下面简单说一下我的收获,关于Erlang的特点的小小总结:

  • 抛弃多线程,使用“进程”,这个“进程”是由 Erlang 虚拟机提供的,比普通意义上线程还轻量级,原因主要在于普通的操作系统进程都会为每个进程预留好几 MB 的内存空间,在 Erlang“进程”中这个预留空间被压缩到了仅仅只有几 KB。
  • 抛弃共享内存的进程通信方式,采用异步消息的方式,全复制的消息免除了临界区加锁的问题。使得在同一台机器上的不同进程,和在不同的机器上的进程的通信方式完全一致。有句格言道:“不要通过共享内存来通信,要通过通信来共享内存。”
  • 函数编程,单次赋值,提前计算
  • 进程化的编程思想 之前知道C是过程式编程,后来还有OO,还能有什么新鲜的吗?就是这个,把你要解决的问题拆分成进程来解决问题,这可是我从来没接触过的。
  • 崩溃恢复机制 现在的服务软件都是需要不间断运行的,如果程序崩溃了怎么办?那就让他崩溃好了,这就是 Erlang/OTP 使用的思想,一个进程崩溃以后会由其他的进程负责擦屁股,重启或者恢复,总之这是在语言级别上提供给开发者的好处而不是还要另外整一大堆解决方案,用Erlang做项目精髓都在OTP当中,很多现在鼓吹的编程方式Erlang很早就有了。同时,Erlang提供的树形的监督机制,借用一个个监督进程来管理一个子进程树,同时起到防止崩溃信息泛滥的,这个子树内的进程崩溃被监督这个进程监督进程隔断在这个子树内不会影响别的进程,监督进程会负责重启发生崩溃的子树。
  • 分布式机制 想把最开始写好的程序扩展到多台或整个集群?那用Erlang你几乎不用改框架或者甚至一行代码,Erlang的进程编程方式对于程序员来说是透明的,你发送信息的接收进程很有可能就在地球的另外一边,这些都不需要你操心。这是和上面的异步消息的通信方式分不开的。
  • 二进制处理,Erlang本来就是为电信系统设计的,其针对二进制数据有专门的处理工具,不仅仅是普通的移位或者与或非。
以上是我经过一天的自学所体会到的,如果不妥之处欢迎指出。我觉得我已经喜欢上这门神奇的语言了,同时它良好的并发支持,与我目前的研究方向——高性能计算也密切相关,决定要投入一定的时间去研究它。

你可能感兴趣的:(erlang)