以前簡單作了一下node.js和python的「hello ***」的頁面測試,也作了循環的測試,本次主要是增長了java的語言,go語言。主要是想看一下主流四種腳本的速度java、python、php、c語言。均使用for循環進行簡單的累加測試。我的技能有限因此只作了簡單測試作參考。php
實驗環境使用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。
1、腳本編寫
php腳本
# cat test.phphtml
1java 2node 3python 4linux 5服務器 6框架 7函數 |
<?學習 $m=0; for (;$i<10000000;$i++){ $m=$m+$i; } echo $m; ?> |
python腳本
# cat test.py
1 2 3 4 5 6 7 8 9 10 |
#!/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
1 2 3 4 5 |
var j=0; for (i = 0; i < 10000000; i++ ) { j=j+i } console.log(j); |
Java代碼:
# cat Test.java
1 2 3 4 5 6 7 8 9 |
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編譯,編譯兩種結果,一種是直接編譯的,一種是優化編譯的。
1 2 3 4 5 6 7 8 9 |
#include <stdio.h> #include <math.h> main() { long i,j=0; for (i=0 ; i<10000000 ; i++) j=j+i; printf("%ld\n",j); } |
go語言代碼
1 2 3 4 5 6 7 8 9 10 11 12 |
; html-script: false ]package main
import "fmt"
func main() { var sum,i int64 sum=0 for i=0;i<10000000;i++{ sum+=i } fmt.Printf("%d",sum) } |
2、運行結果
使用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 |
3、結論
從簡單的測試來看,c語言不是通常的快,大數據計算狀況下node.js速度最快,java次之,python和php比慢。可是若是是少許計算時php效果仍是很不錯。可是實際應用中,還須要調用各類函數和各方面的資源,並不能以一個空框架下的for來判斷。go的速度與C至關,可是編譯速度仍是比C要慢一點,以上的代碼C編譯完只有6K多,go編譯完有1.3M。每種語言都會有本身擅長的一方面,速度快與慢,還與編寫的技巧性有關。學好每一步,認認真真踏實的作就行了。
注:C、go和java被編譯後會對代碼進行優化。各自不一樣的編譯器優化的側重也不同,因此這個測試有些失實。好比即便循環數再大java時間也不會有改變,估計是在編譯時已經將for裏的值計算完畢,運行時直接取結果。有興趣的能夠學習編譯原理。