2017年的golang娄昆、Python佩微、PHP、C++萌焰、C哺眯、Java、Nodejs性能對(duì)比

姓名:房小慧

學(xué)號(hào):17101223361

專業(yè):軟件工程

轉(zhuǎn)載自:sunsky303 - 博客園? ? ?鏈接:www.cnblogs.com/sunsky303/p/6506663.html

【嵌牛導(dǎo)讀】:本文把最近主流的編程語(yǔ)言性能作個(gè)簡(jiǎn)單的比較杆怕, 至于怎么比族购,要用神奇的斐波那契算法壳贪。

【嵌牛鼻子】:編程語(yǔ)言性能

【嵌牛提問(wèn)】:編程語(yǔ)言在性能方面都有什么優(yōu)缺點(diǎn)?

【嵌牛正文】:

本人在PHP/C++/Go/Py時(shí)寝杖,突發(fā)奇想违施,想把最近主流的編程語(yǔ)言性能作個(gè)簡(jiǎn)單的比較, 至于怎么比瑟幕,還是不得不用神奇的斐波那契算法磕蒲。可能是比較常用或好玩吧只盹。好了辣往,talk is cheap, show me your code! ?打開(kāi)Mac,點(diǎn)開(kāi)Clion開(kāi)始Coding吧殖卑!

1.怎么第一是Go呢站削,因?yàn)槲覀€(gè)人最近正在用,感覺(jué)很不錯(cuò)

package main

import "fmt"

func main(){

fmt.Println(fibonacci(34))

}

func fibonacci(i int) int{

if(i<2){

return i;

}

return fibonacci(i-2) + fibonacci(i-1);

}

先用 Go1.7看看:

qiang@localhost:/works/learnCPP$ go version && time go build ?fib.go ?&& time ./fib

go version go1.7.5 darwin/amd64

real ? ?0m0.206s

user ? ?0m0.165s

sys ? ? 0m0.059s

real ? ?0m0.052s

user ? ?0m0.045s

sys ? ? 0m0.004s

然后孵稽,再看看1.8的:

qiang@localhost:/works/learnCPP$ go18 version && time go18 build ?fib.go ?&& time ./fibgo version go1.8darwin/amd64 ? real0m0.204s ? user0m0.153s ? sys0m0.062s ? real0m0.051s ? user0m0.045s ? sys0m0.003s

感覺(jué)看不出差異许起,但官方1.8在GC、Compile等方面優(yōu)化提升了20%菩鲜,可能是這demo太簡(jiǎn)單了吧园细。

2.Python,最近玩得也火熱接校,所以拿來(lái)比比

deffibonacci(i):ifi<2:returnireturnfibonacci(i-2) + fibonacci(i-1) ? print(fibonacci(34))

先來(lái)看看python2.7

qiang@localhost:/works/learnCPP$ python2 -V && time python2 ./fib.py

Python2.7.13real

0m2.651s ? user0m2.594s ? sys0m0.027s

接著是Py 3.5

qiang@localhost:/works/learnCPP$ python3 -V && time python3 ./fib.pyPython3.5.1

real0m3.110s ? user0m2.982s ? sys0m0.026s

一眼就看出Py最大的問(wèn)題了:越升級(jí)越慢猛频, 而且要命的是很多語(yǔ)法不兼容,但平時(shí)寫(xiě)寫(xiě)算法蛛勉、小程序還不錯(cuò)鹿寻,其它的時(shí)候,就算了董习,還是用Go吧烈和。

3.PHP嘛,我工作用的多皿淋,所以也必須比較下

function fibonacci($i){

if($i<2) return $i;

return fibonacci($i-2) + fibonacci($i-1);

}

echo ?fibonacci(34);

由于我的工作主要用的php5.4招刹,所以先來(lái)波:

qiang@localhost:/works/learnCPP$ php54 -v && time php54 ?fib.php

PHP5.4.43(cli) (built: Dec21201612:01:59) ? ?Copyright (c)1997-2014The PHP Group ? Zend Engine v2.4.0, Copyright (c)1998-2014Zend Technologies ? real0m2.288s ? user0m2.248s ? sys0m0.021s

測(cè)試環(huán)境是5.6,所以也來(lái)波:

qiang@localhost:/works/learnCPP$ php -v && time php ?fib.php

PHP5.6.28(cli) (built: Dec6201612:38:54) ? ?Copyright (c)1997-2016The PHP Group ? Zend Engine v2.6.0, Copyright (c)1998-2016Zend Technologies ? real0m2.307s ? user0m2.278s ? sys0m0.017s

新項(xiàng)目窝趣、自己玩什么的都是php7, 請(qǐng)看:

qiang@localhost:/works/learnCPP$ php -v && time php ?fib.php

PHP5.6.28(cli) (built: Dec6201612:38:54) ? ?Copyright (c)1997-2016The PHP Group ? Zend Engine v2.6.0, Copyright (c)1998-2016Zend Technologies ? real0m2.307s ? user0m2.278s ? sys0m0.017s

感覺(jué)php7和5是天壤之別疯暑,完全不是一個(gè)東西,而且進(jìn)步提升太大了哑舒,在此依賴?guó)B哥點(diǎn)個(gè)贊妇拯!建議大家多用php7.

4.C++是我最愛(ài)的理論基礎(chǔ),當(dāng)然說(shuō)的是C++11/14,不是老古董c99等

#include

constexpr int fibonacci(const int i){if(i<2)returni;returnfibonacci(i-2) + fibonacci(i-1); ? } ? int main() { ?? ? ?fibonacci(34);return0; ? }

先用g++ 6.2 無(wú)優(yōu)化看看:

qiang@localhost:/works/learnCPP

$ time g++-6 ?-o a.bin main.cpp && time ?./a.bin

real0m0.378s ? user0m0.254s ? sys0m0.104s ? real0m0.050s ? user0m0.043s ? sys0m0.002s

加優(yōu)化-O2后越锈,

qiang@localhost:/works/learnCPP

$ time g++-6 -O2 -o a.bin main.cpp && time ?./a.bin

real0m0.874s ? user0m0.344s ? sys0m0.180s ? real0m0.034s ? user0m0.019s ? sys0m0.004s

效果還是很明顯的仗嗦, 運(yùn)行時(shí)間只有前者一半。

5. C也寫(xiě)了個(gè)

#include ? int fibonacci(int i){if(i<2)returni;returnfibonacci(i-2) + fibonacci(i-1); ? } ? int main(){ ?? ? ?printf("%d",fibonacci(34)); ? }

不加優(yōu)化:

#include ? qiang@localhost:/works/learnCPP

$ time gcc-6-o c.bin fib.c && time ./c.bin ? ?real0m0.341s ? user0m0.063s ? sys0m0.101s ? real0m0.049s ? user0m0.044s ? sys0m0.002s

加-O2優(yōu)化:

qiang@localhost:/works/learnCPP

$ time gcc-6-O2 -o c.bin fib.c && time ./c.bin ? ?real0m0.143s ? user0m0.065s ? sys0m0.034s ? real0m0.034s ? user0m0.028s ? sys0m0.002s

和C++14一樣甘凭, 優(yōu)化后提速明顯稀拐,快了一倍。

6.Java

clasFib{ ?? ? ?public ? staticvoidmain(String[] args){ ?? ? ? ? ?System.out.println(fibonacci(34)); ?? ? ?} ?? ? ?static int fibonacci( int i){if(i<2)returni;returnfibonacci(i-2) + fibonacci(i-1); ?? ? ?} ? }

編譯丹弱、運(yùn)行的結(jié)果是:

qiang@localhost:/works/learnCPP

$ java -version && time javac Fib.java && ?time java Fib ? ?java version"1.8.0_25"

Java(TM) SE Runtime Environment (build1.8.0_25-b17) ? Java HotSpot(TM)64-Bit Server VM (build25.25-b02, mixed mode) ? real0m0.952s ? user0m1.302s ? sys0m0.144s ? real0m0.150s ? user0m0.123s ? sys0m0.025s

性能還行德撬, Compile時(shí)間和c++/go比就太low了。

7.最后出場(chǎng)的當(dāng)然是一直大紫大紅的JavaScript躲胳,不蜓洪,準(zhǔn)確說(shuō)是Nodejs(這玩意和java真tmd沒(méi)半毛錢(qián)關(guān)系)

qiang@localhost:/works/learnCPP

$ java -version && time javac Fib.java && ?time java Fib

functionfibonacci(i){if(i<2)returni;returnfibonacci(i-2) + fibonacci(i-1); ? }console.log(fibonacci(34))

結(jié)果:

qiang@localhost:/works/learnCPP$ node -v && time node ?fib.js ? ?v6.10.0

real0m0.332s ? user0m0.161s ? sys0m0.062s

結(jié)果還是令人震驚的,竟然只有TMD 0.3s坯苹,一共也不到0.5s隆檀,幾乎接近java了, 但這代碼量北滥、維護(hù)性的優(yōu)勢(shì)還真得多感謝Google爹刚操、Chromium爹的V8兒子以及開(kāi)源社區(qū)闸翅。

如果Nodejs真的運(yùn)行得穩(wěn)定了再芋, 不準(zhǔn)真能一統(tǒng)“程序江湖”, 當(dāng)然我只是說(shuō)說(shuō)坚冀,不要太認(rèn)真济赎。

來(lái)張圖中吧:

總結(jié):

感覺(jué)每種language都不同用途记某,性能只是一個(gè)很單一的指標(biāo),我本人比較看重的是:可閱讀性壳猜、可維護(hù)性滑凉、可移植性畅姊、健壯性、擴(kuò)展性朱嘴,然后是性能粗合。 而且現(xiàn)代硬件越來(lái)越牛逼,動(dòng)不動(dòng)手機(jī)就8個(gè)G壤追,cpu趕上5年前的PC的cpu了大诸,ssd普及化...。 本人比較看好Golang/php/python焙贷,也關(guān)注現(xiàn)代的C++贿堰,如14、17, 至于rust故硅、swift纵搁、java腾誉、scala就算了,這主要和個(gè)人的需要趣效、公司技術(shù)棧相關(guān)跷敬。哈哈热押! 先寫(xiě)這么多吧!

注:如有需要池凄,請(qǐng)閱讀原文肿仑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尤慰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子杯道,更是在濱河造成了極大的恐慌党巾,老刑警劉巖霜医,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肴敛,死亡現(xiàn)場(chǎng)離奇詭異医男,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)刀森,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)撒强,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)笙什,“玉大人琐凭,你說(shuō)我怎么就攤上這事浊服。” “怎么了愁憔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵吨掌,是天一觀的道長(zhǎng)膜宋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)秋茫,這世上最難降的妖魔是什么肛著? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任枢贿,我火速辦了婚禮萨咕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘聪建。我一直安慰自己金麸,他們只是感情好簿盅,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布棚瘟。 她就那樣靜靜地躺著喜最,像睡著了一般瞬内。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上章咧,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天赁严,我揣著相機(jī)與錄音误澳,去河邊找鬼。 笑死裆装,一個(gè)胖子當(dāng)著我的面吹牛哨免,可吹牛的內(nèi)容都是我干的昙沦。 我是一名探鬼主播盾饮,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼普办,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼徘钥!你這毒婦竟也來(lái)了呈础?” 一聲冷哼從身側(cè)響起而钞,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤笨忌,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體途凫,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡果元,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年而晒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了倡怎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片监署。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钠乏,死狀恐怖晓避,靈堂內(nèi)的尸體忽然破棺而出俏拱,到底是詐尸還是另有隱情彰触,我是刑警寧澤命辖,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布尔艇,位于F島的核電站终娃,受9級(jí)特大地震影響棠耕,放射性物質(zhì)發(fā)生泄漏窍荧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一憔恳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧今瀑,春花似錦放椰、人聲如沸砾医。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伦吠。三九已至毛仪,卻和暖如春箱靴,著一層夾襖步出監(jiān)牢的瞬間荷愕,已是汗流浹背安疗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掉冶,地道東北人厌小。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像透硝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子罪治,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容