中国开发网: 论坛: 超级垃圾站: 贴子 478638
leejd
动态语言开发效能的一个案例研究【ZT:http://www.eedesign.com.cn/BBS/TopicView.aspx?TopicID=7704】
动态语言开发效能的一个案例研究
    现在越来越多的人开始承认动态语言在开发效能方面的优势,但是应该说这还只是停留在人的感觉上,缺乏客观、量化的证据。当然,真正要做到客观的比较是不可能的。一个团队开发一个具有一定规模的软件项目,这是一个复杂的过程,牵扯到的各方面因素很多,不可能做到完全客观、仅仅针对开发语言本身效能的比较。但是,为数庞大的开源软件项目当中,挑出一些使用不同语言开发的目标相同的项目,并且对其开发效能做一个比较,这是可能的。尽管这种比较未见得公允,但是仍然具有一定参考价值。

    我看到的一个比较有意义的比较是在C、Java和Python三种语言之间进行的,目标都是开发符合SSH服务端协议的软件包。这是一个具有相当技术性且有一定规模的任务,由各语言的专家级开发者完成,因此具有可比性。相关数据如下(截至2003年):

C语言:OpenSSH,直接基于Unix系统服务,从1999年开始开发,4年之后共有64,000行C源代码。2003年时,开发者列表上共有84人。平均每人写了762行代码,也就是190.5行/人年。

Java语言:J2SSE,基于Java 1.3 Standard版提供的API,从2002年初开始开发,由SUN官方支持,2003年拥有20,000行Java源代码,开发者7人,平均每人2857行代码,1428.5行/人年。

Python语言:Conch,基于Twisted Framework,项目起点时间不详,大致为2002年中,到2003年共有5,000行源代码,开发者1人,约4000-5000行/人年。

    这个数据可以给大家评估动态语言的效能做一点参考。需要注意的是:

1. C语言版的OpenSSH本身就带有探索性质,所以开发周期较长。
2. OpenSSH开发者虽然多达84人,但是一般来说开源项目中起核心作用的开发者一般在6-8人左右,很可能这几个人贡献了大部分代码,因此上面对C语言开发效能的评估严重偏低。
3. Conch本身架构在Twisted之上,后者是一个高层的网络开发框架,本身也是具有6万行代码规模的项目。Conch的高效能很大程度上受惠于此。
4. J2SSE是Sun官方开发的项目,其开发方式不同于开源松散的开发方法,因此上述得到的开发效能可能被高估。

    综合以上的考虑,我认为从这个case study中得出三种语言开发效能的比大致在1:4:10的估计值。

    附带一提,据Twisted文档宣称,Conch的运行时性能并不逊色于OpenSSH。在同一台计算机上,OpenSSH每秒钟可接纳3个连接,传输速度7.4MB/s。而纯Python实现的Conch每秒钟可接纳8个连接,传输速度3MB/s。经过Psyco编译优化后,每秒钟可接纳11 个连接,传输速度8.1MB/s。

    请注意,这是2003年的数据。

    本文主要素材来源与Twisted创造者Glyph Lefkowitz发表在USENIX 2003会议上的论文,题为《Network Programming for the Rest of Us》,并在此基础上进行了一些历史资料调查。关于开发年限的调查可能有误,希望得到有识之士的纠正。

好几个朋友看了这篇blog,对于开发效能都不是很在意,反而是对于最后这个运行时性能的比较非常感兴趣。然而我的看法是,不要过于看重这个评测结果。

首先,这是Twisted自己的文档,尽管我相信评测者不会故意伪造试验条件贬低OpenSSH,但是没有尽心优化,却是非常可能的。

其次,经Psyco编译之后,Conch实际上是一个native code program。你说“解释型语言不大可能超过编译型语言”,但这里是两个机器码程序之间的比较。

第三,请注意当你用C语言写一个高层应用程序的时候,你的思路不得不在高级设计和底层细节之间不断跳越,很难把握好,形成真正优化的设计。而你做的很多事情是在重复Python等高级语言已经内建并且经过极度优化的工作,用Python写代码,可以集中力量思考高级设计问题,所以比较容易形成良好的设计。很早有人就发现,用C语言进行正则表达式分析还不如Perl快,这并不是语言本身的比较,而是当开发者能力相当时,采用高级语言能够比较容易地得到优化的整体设计。

第四,我相信,如果设计上水平相当,C肯定跑得比Python快十倍。问题在于,一旦程序规模达到一定程度,完成一个与对应Python程序在设计上水平相当的C程序,所付出的代价恐怕要多出几十倍。


myan 发表于2006-08-08 07:48:00 IP: 219.236.52.*

Python在动态语言里并不是以快闻名的,其实它的设计思想主要是追求高层次上的简单优雅,在性能上不仅不是最快的,而且很多年以来一直有“最慢”的恶名。可是放在实践中感觉完全不是那么一回事,大家觉得开发效率和运行效率都令人满意。我想主要原因就是Python的资源丰富而且质量很高,当性能遇到瓶颈的时候,有人会去开发extension。这样一来就形成了良好的平衡。

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录