24小时热门版块排行榜    

查看: 552  |  回复: 4
当前主题已经存档。

yalefield

金虫 (文坛精英)

老汉一枚

[交流] 【讨论】天赋异禀,返老还童--Erlang语言 [转载+评述]

Erlang:为了并发而生

20多年前,它的创建者们就已经意识到了这一问题,转而选择了一条与主流语言完全不同的路:采用消息模型,进程之间并不共享任何数据,因而也就完全地避免了引入锁的必要。

对于多核系统而言,完全无锁,也就意味着相同的代码在更多核心的CPU上会很容易具有更高的性能,而对于分布式系统,则意味着尽可能地避免了顺序瓶颈,可以把更多的机器无缝地加入到计算网络中来

就年龄而言,Erlang大约与Perl同年,比C++年轻四岁,长Java差不多十岁,但Java早已经是工业主流语言,C++和Perl甚至已经进入其生命周期的下降阶段。照理说,一个被扔在角落里二十多载无人理睬的老家伙合理的命运就是坐以待毙,没想到Erlang却像是突然吃了返老还童丹似的在二十多岁的“高龄”又火了一把。

为什么呢?

CPU的多核化与云计算

2005年,C++标准委员会主席Herb Sutter在Dr. Dobb’s Journal上发表《免费午餐已经结束》一文:如果未来不能有效地以并行化的软件充分利用并行化的硬件资源,我们的计算效率就会永远停滞在仅仅略高于当前的水平上,而不得动弹。因此,未来的计算必然是并行的。

Herb Sutter本人曾表示,如果一个语言不能够以优雅可靠的方式处理并行计算的问题,那它就失去了在21世纪的生存权。

“主流语言”当然不想真的丧失掉这个生存权,于是纷纷以不同的方式解决并行计算的问题。

C/C++:除了标准委员会致力于以标准库的方式来提供并行计算库之外,标准化的OpenMP和 MPI,以及Intel的Threading Building Blocks库也都是可信赖的解决方案;
Java:在5.0版中引入了意义重大的concurrency库,得到Java社区的一致推崇;
微软:先是在.NET中引入APM,随后又在Robotics Studio中提供了CCR库,最近又发布了Parrallel FX和MPI.NET,可谓不遗余力。

亡羊补牢!

因为这些语言和基础设施在创造时都没有把并行化的问题放到优先的位置来考虑。

与它们相反,Erlang从其构思的时候起,就把“并行”放到了中心位置,其语言机制和细节的设计无不从并行角度出发和考虑,并且在长达二十年的发展完善中不断成熟。今天,Erlang可以说是为数不多的天然适应多核的可靠计算环境,这不能不说是一种历史的机缘。
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hookah

木虫 (正式写手)

学习了一下!
2楼2010-03-24 08:50:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sondwall

铁杆木虫 (著名写手)


jjdg(金币+1):感谢交流 2010-03-24 12:06
敬佩楼主的学识渊博~~
3楼2010-03-24 09:15:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+1):谢谢参与讨论! 2010-03-26 16:30
这东西挖出来其实没什么用。Erlang的设计虽然是完全并行化的,但要命的是,它实现了一套自己的VM,线程控释方面都是自己在做,而于系统脱节。这虽然提供了强大的thin thread但牺牲了效率。已经有用Erlang实现的Web Server,测试表明,在并发性上没有比C有更大的优势。特别是在IO的时候。这个可以想象,因为C直接面对硬件,而Erlang则隔着一个中间层。

不过在一些大型的分布式环境中,Erlang的优势还是不小的。但在数值计算领域,我没有看到他的威力。

目前关注的另一个新兴语言是Google去年年底刚刚发布的Go-lang。这个同样原生支持并发的语言,号称在效率方面直逼C。

当然,已经发展多年的HPF也可能是数值领域的救世主。谁知道呢。未来真的很难说。
4楼2010-03-26 12:11:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yalefield

金虫 (文坛精英)

老汉一枚


余泽成(金币+1):您也来当专家吧! 2010-03-26 16:33
引用回帖:
Originally posted by holmescn at 2010-03-26 12:11:37:
这东西挖出来其实没什么用。Erlang的设计虽然是完全并行化的,但要命的是,它实现了一套自己的VM,线程控释方面都是自己在做,而于系统脱节。这虽然提供了强大的thin thread但牺牲了效率。已经有用Erlang实现的We ...

这个就与当年的Java情形类似。
俺就犹豫,是继续吃维生素呢,还是喝咖啡呢?

结果,虽然有了JVM,但是“一次编写,到处运行”,变成了“一次编写,到处调试”。

俺的体会:

桌椅板凳都是木头
大舅二舅都是他舅
不管是中餐还是西菜
都能加上维生素
可是咖啡,就不能撒上蒜末那样喝
5楼2010-03-26 12:44:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 yalefield 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见