【张子萌 www.simonzhang.net 2012-4-1】
【张子萌 www.simonzhang.net 2012-8-8 修改增加go语言】
之前简单做了一下node.js和python的“hello ***”的页面测试,也做了循环的测试,本次主要是增加了java的语言,go语言。主要是想看一下主流四种脚本的速度java、python、php、c语言。均使用for循环进行简单的累加测试。个人技能有限所以只做了简单测试做参考。
实验环境使用linux 64位服务器,操作系统为contos 5.4,php版本5.1.6,python版本为2.6.6,node.js版本为0.4.12,java版本为1.6.0_03,gcc 版本 4.1.2 2008070,go语言为1.0.2。
一、脚本编写
php脚本
# cat test.php
$m=0;
for (;$i<10000000;$i++){
$m=$m+$i;
}
echo $m;
?>
python脚本
# cat test.py
#!/bin/env python
#-*- coding:utf-8 -*-
def main():
j = 0;
for i in xrange(10000000):
j=j+i
print j
if __name__=="__main__":
main()
node.js脚本
# cat test.js
var j=0;
for (i = 0; i < 10000000; i++ ) {
j=j+i
}
console.log(j);
Java代码:
# cat Test.java
public class Test {
public static void main(String[] args) {
long n = 0;
for (int i = 0; i < 10000; i++) {
n=n+i;
}
System.out.println(n);
}
}
C语言,使用gcc编译,编译两种结果,一种是直接编译的,一种是优化编译的。
#include
#include
main()
{
long i,j=0;
for (i=0 ; i<10000000 ; i++)
j=j+i;
printf("%ld\n",j);
}
go语言代码
package main
import "fmt"
func main() {
var sum,i int64
sum=0
for i=0;i<10000000;i++{
sum+=i
}
fmt.Printf("%d",sum)
}
二、运行结果
使用time命令对程序运行时间进行统计
以下是循环一千万次的累加测试结果。
参数 |
C语言直接编译 |
C语言优化编译 |
go |
Node.js |
Python |
PHP |
Java |
Real |
0.024s |
0.001s |
0.011s |
0.420s |
1.055s |
1.429s |
0.087 |
User |
0.023s |
0.000s |
0.011s |
0.401s |
1.046s |
1.423s |
0.067 |
sys |
0.001s |
0.001s |
0.000s |
0.019s |
0.009s |
0.007s |
0.015 |
以下是循环一万次的累加测试结果
参数 |
C语言直接编译 |
C语言优化编译 |
go |
Node.js |
Python |
PHP |
Java |
Real |
0.001s |
0.001s |
0.004s |
0.090s |
0.027s |
0.014s |
0.087 |
User |
0.000s |
0.001s |
0.003s |
0.080s |
0.022s |
0.007s |
0.041 |
sys |
0.001s |
0.000s |
0.002s |
0.010s |
0.006s |
0.007s |
0.017 |
三、结论
从简单的测试来看,c语言不是一般的快,大数据计算情况下node.js速度最快,java次之,python和php比慢。但是如果是少量计算时php效果还是很不错。但是实际应用中,还需要调用各种函数和各方面的资源,并不能以一个空框架下的for来判断。go的速度与C相当,但是编译速度还是比C要慢一点,以上的代码C编译完只有6K多,go编译完有1.3M。每种语言都会有自己擅长的一方面,速度快与慢,还与编写的技巧性有关。学好每一步,认认真真踏实的做就好了。
注:C、go和java被编译后会对代码进行优化。各自不同的编译器优化的侧重也不一样,所以这个测试有些失实。比如即使循环数再大java时间也不会有改变,估计是在编译时已经将for里的值计算完毕,运行时直接取结果。有兴趣的可以学习编译原理。