右侧为C#实现的并行计算,左侧为Java实现的并行计算。
在两者均无特别优化的情况下,C#的性能是Java的8倍。造成这一现象的原因并不是Java语言本身性能低下,而是两者的默认参数区别。
C#基本没有留给开发者可调整的参数,操作系统默认的参数在80%以上的情况下是最优的。
而Java为了能实现跨平台,不得不采取最保守的默认参数,以使几乎所有平台都能运行,Java把参数调整的权力留给了开发者。JVM可调整参数有数十个,而CLR几乎就没有可调整的参数。如果仔细调整JVM的数十个参数,性能必然能达到甚至超越C#的实现。不过,几十个参数就像几十个维度,组合有千万种,如何调整这些参数的难度需要足够的经验支撑,而这些经验来自于非Java语言本身,大量涉及操作系统。比如堆与栈的内存分配比例,C#不可调,Java可调(且默认值是性能很差的,不适合于高性能计算类的需求)。甚至Java还可调整JVM的垃圾回收算法的内部细节。
从Java\C#\Php三个语言全部学完的感觉来说。Php的学习难度最低,可以打3分。C#的学习难度居中,可以打5分。Java的学习难度最高,可以打10分。Php与C#基本只要学会如何使用手册中提供的示例,基本就能写出性能不错的程序,而Java还需要后续的经验才能保证达到较高的性能。Php与C#两个语言的设计团队,最求的目标是使开发越来越简单,所以封装了大量底层实现细节,只留给开发人员最简单的调用接口。而Java的设计团队是把权力留给开发人员,所以开放了几乎所有底层细节。所以也不奇怪,为什么现在高端的Java程序员待遇极高,因为大量需要人的经验来保证系统的较高性能。
通过三个语言均学习较为深入得出的语言特性分析,算是比较客观了。语言没有好坏,只有不同的特点与试用环境。接受一门新的语言,就接受了一种新的思维方式。对事物的理解也更加深刻。希望大家都能接触更多其他语言的知识,尽早实现我们多语言融合的目标。
测试IIS+C#、TOMCAT+Java、Apache+Php最简单的空页面性能(基于Windows部署)。
IIS+C#和TOMCAT+Java性能比较接近,在4500RPS左右。Apache+Php性能最差,在3500RPS左右。IIS+C#和Apache+Php的组合在估计范围内。IIS从8.0以后(微软的架构调整,IIS8.0的体量很轻了)的性能不输Nginx。Apache过于沉重,不进行特殊调校,很难提升效率,Apache+Php换成Nginx+Php,可能三种组合的性能都非常接近。当然,因为Web服务器,语言均不相同,所以测试结果没有实际意义。尤其后两者有大量参数可以配置(均采用默认配置)且可以部署在Linux上,所以操作系统可能也是影响因素之一。
曹艳白caoyanbai@139.com 16:14:23