拿Erlang来拯救谁?---Erlang学习总结一

工作中主要使用C/C++作为开发语言。

也曾在PHP,JAVA,JS,LUA上逗留过,但对它们,我没有花费过多的精力。部分原因可能是由于工作不能实际使用这些语言来开发项目,而我的理解是它们对我的吸引力还不够。

但是,当我偶遇上了Erlang,一见如故人,竟然能完全满足我在梦中试图用C++无数次勾勒的形象,甚至是让我惊艳的。

于是,借着Armstrong先生的《面对软件错误构建可靠的分布式系统》和《Erlang程序设计》,与这一故人已畅谈两星期有余。

Erlang为什么吸引我?现做一理性总结:

1. Erlang的动态类型,模式匹配,基于消息,面向并发的纯函数式开发范式( 由这些特性直接导出以下几点);

2. 据说,Erlang开发效率是C/C++的9倍(待验证);

3. 用C/C++开发服务端,我需要纠结于采用什么网络库,或是重头造轮子自己搞一套,还要对数据解包打包等等其他一些基础设施做封装,然后才能开始业务代码的编写,而Erlang把这一切都搞定了(IO能力已得到我的验证),我可以一开始就编写业务相关代码;

4. 用C++编码,我要用层层的try-catch块包裹正常的功能代码,而这样看起来总是让人厌烦,Erlang倡导的速错哲学让我完全不用关心什么地方会有未捕获的异常抛出把我的程序弄崩了;

5. 用C++,有N多个类都有Init(),Start(),Stop(),Restart()方法,最上层的应用有,下层模块有,模块中的功能类可能也有这些方法,可怕的重复,而Erlang用监督树把这个问题完美的抽象了;

6. 用C++,我要操心模块与模块之间的通信,采用什么格式?效率有损失吗?够灵活吗?Erlang的进程间消息通信马上就将我解脱了;

7. 用C++开发系统,我要考虑到系统的水平伸缩性,各个功能模块怎么部署,还有负载均衡等,而Erlang语言就已经提供了多节点能力,我只需要操心怎样将系统的所有进程分配在分布式的多个节点上就可以了;

8. 用C++开发多线程程序,我要时刻想着同步问题,同时还要绞尽脑汁减少锁的使用以最大并行化,而用Erlang我只用顺序化写代码就可以了;

9. 热部署,听起来就让人头脑发烫,激动人心,而这用C++来做该有多麻烦(不是不可以办到)!

10. 传说中六个9的可靠性,你信吗,反正我信。

而事实上,在工作中,我还是得用C/C++来开发项目,我想不可能说服现有项目组采用Erlang来开发的。可行的方案是,用Erlang快速开发一个demo版本出来,以事实说话。 

接下来,应该研究一下Erlang的优秀开源项目了,就从RabbitMQ开始吧。 

下载源代码,找到入口点{mod, {rabbit, []}},先找到那棵树。。。

你可能感兴趣的:(并发,erlang,服务器,网络编程)