给自己一条退路,再次比较Erlang和Golang erlang vs golang

给自己一条退路,再次比较Erlang和Golang

2014-6-28

陈叶皓 chenyehao@gmail.com

雨天的周末,适合码字的时节。。。

一年前我开始学习go语言的时候,如获至宝,既有python的编码效率,又带来性能的15倍提升。尤其是在异步编程方面,可以使用channel同步线程,不必加锁可以充分利用cpu多核计算,真是没有弱点。

后来慢慢了解到,这种无锁异步编程的思想,源自一门叫做erlang的语言,Erlang更加了不起。除了异步编程之外,这门语言天生支持分布式,单机上开发的软件,可以不加修改地运行在集群上,另外还支持软件版本的热升级,自带的OTP框架支持进程间的监督和重启,提供了坚如磐石的运行环境。Erlang是如此完美,我认为是最适合开发互联网应用的语言,一时间有种“终于找到真理”的喜悦。

不过那个时候,心里总觉得有什么地方不对,那就是,七牛CEO许式伟本身是Erlang高手,他却为自己的公司选择go语言,七牛成为一家只使用go语言进行开发的公司。

最近几天随着erlang学习的深入,慢慢找到了答案。Erlang实质是一门动态语言,它的动态类型,动态函数调用,都充分表现的动态语言的特征。Erlang是一个运行在虚机里面的动态语言,其实也不奇怪,只有动态语言,才容易实现软件版本的热升级。那动态语言有什么缺点,就是慢,动态语言因为时刻要进行类型推导,执行速度就是要比静态语言慢好几倍,所以,erlang自身所做的优化,就是尽可能把常用的功能用c语言实现,集成到erlang的虚机内,至于程序员编写的代码,也只能慢慢地执行了。

所以erlang适用的场景是,高并发且计算不密集,例如whatsapp,使用erlang编写,千万用户同时在线,高并发的典型场景,但是用户之间发送消息是不密集的,一个人打字能有多快,这个场景就特别适合erlang。

许式伟早就明白,七牛要提供的图片云存储,时刻需要大块磁盘IO,图片实时缩放需要大量CPU计算,选择静态语言go语言,可以提高性能,减少服务器的购买。

“世间安得双全法,不负如来不负卿”,高并发和密集计算其实是一对矛盾,当cpu服务于密集计算,自然无暇响应更多的请求。当然可以使用erlang搭建互联网服务,响应高并发地请求,然后把计算转移到cpu空闲的节点上,然而那些计算节点,如果是用静态语言(比如go语言)编写,会获得更好的性能。

在设计软件时,微观上,要识别哪些可以并发,哪些必须串行。宏观上,要识别哪些是IO密集,哪些是计算密集。永远没有标准答案,正是这个行业的魅力。

比较总结:

Erlang的优势,其中的2,3,4并没有别的语言可以匹敌

1.高并发,异步编程的鼻祖,写并发代码很简单

2.支持集群

给自己一条退路,再次比较Erlang和Golang erlang vs golang

3.健壮(OTP的进程监督机制)

4. 代码热升级、热回滚

Go语言(scala,F#类似)的优势,

1.高并发,支持异步编程

2.高性能(静态语言的优势)

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/64141.html

更多阅读

一条鱼,一南一北两种吃法——酸菜鱼VS东北炖鱼 我是一条鱼

儿子睡午觉了,赶快上来转一圈,瞧一瞧,顺便更新。这还是周末做的,一直也没空弄图发出来。我这无业游民MS比上班族还忙,看来我要提高我的效率了。不能永远让“效率低”、“懒”的帽子扣在我身上。老公钓了几条好大的鱼,我留了一条三斤多

一条毛巾背后的礼尚往来 礼尚往来

前一阵朋友的老丈人去世了,作为朋友,和其他人一样,行礼100元钱,只是一种习惯。大多数情况下,自己把它当成了一种习俗,而没有想它背后的东西。过了两天,朋友回来上班了,然后给我们每人一条毛巾,作为答谢。自己开始想,只是一百元钱,何必要送个毛

我的祖国(一条大河波浪宽 歌词 我和我的祖国歌词

博主注:有一些儿时的歌现在听起来会起鸡皮疙瘩,肉麻麻的感觉。唯有这首”一条大河波浪宽“在我心里扎了根,发了芽。每一次听到,都触动我心的深处。近来又听到,眼框里总是充满泪水,心里又很痛。这歌词里没有红与黑,没有歌功颂德,只有爱。深深

声明:《给自己一条退路,再次比较Erlang和Golang erlang vs golang》为网友斷橋殘影分享!如侵犯到您的合法权益请联系我们删除