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

前端之家收集整理的这篇文章主要介绍了给自己一条退路,再次比较Erlang和Golang前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

http://blog.sina.com.cn/s/blog_6e1bd8350102uwgl.html

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

2014-6-28

陈叶皓 chenyehao@gmail.com


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

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

@H_301_8@

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

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

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

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

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

“世间安得双全法@H_301_8@,不负如来不负卿”,高并发和密集计算其实是一对矛盾,当@H_301_8@cpu服务于密集计算,自然无暇响应更多的请求。当然可以使用@H_301_8@erlang搭建互联网服务,响应高并发地请求,然后把计算转移到@H_301_8@cpu空闲的节点上,然而那

猜你在找的Go相关文章