Maison >développement back-end >tutoriel php >Analyse détaillée d'exemples de codes pour comparer les performances de Golang, Python, PHP, C, C, Java et Nodejs

Analyse détaillée d'exemples de codes pour comparer les performances de Golang, Python, PHP, C, C, Java et Nodejs

黄舟
黄舟original
2017-03-13 16:40:312524parcourir

Cet article présente des informations pertinentes sur la comparaison des performances de golang, python, php, c, c, java et Nodejs. Les amis qui en ont besoin peuvent s'y référer <.>

Lorsque je travaillais sur PHP/C/Go/Py, j'ai soudain eu l'idée de faire une simple comparaison des performances des récents

langages de programmation grand public Quant à savoir comment faire. comparez, je dois encore utiliser l'algorithme magique de Fibonacci. C’est peut-être plus couramment utilisé ou amusant.

Bon, parler ne coûte rien, montre-moi ton code ! Ouvrez ton Mac, clique sur Clion et commence à coder !

1. Pourquoi Go est-il le premier Parce que je l'utilise personnellement récemment et je me sens très bien


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);
}
Jetons un coup d'oeil avec Go1.7 d'abord :

Le code est le suivant :


qiangjian@localhost:/works/learnCPP$ go version && time go build  fib.go  && time ./fibgo version go1.7.5 darwin/amd64
real    0m0.206suser    0m0.165ssys     0m0.059s
real    0m0.052suser    0m0.045ssys     0m0.004s
Ensuite, regardez la version 1.8 :


Le code est le suivant suit :


qiangjian@localhost:/works/learnCPP$ go18 version && time go18 build  fib.go  && time ./fibgo version go1.8 darwin/amd64
real    0m0.204suser    0m0.153ssys     0m0.062s
real    0m0.051suser    0m0.045ssys     0m0.003s
Je ne peux pas faire la différence, mais la version officielle 1.8 a amélioré l'optimisation de 20 % dans des aspects tels que GC et Compile. Peut-être que cette démo est trop simple.

2. Python a été très populaire récemment, alors comparons


def fibonacci(i):
  if i<2:
    return i
  return fibonacci(i-2) + fibonacci(i-1)
 
print(fibonacci(34))
Jetons d'abord un coup d'œil à python2.7


qiangjian@localhost:/works/learnCPP$ python2 -V && time python2 ./fib.py 
Python 2.7.13
5702887

real 0m2.651s
user 0m2.594s
sys 0m0.027s
Puis est arrivé Py 3.5


qiangjian@localhost:/works/learnCPP$ python3 -V && time python3 ./fib.py 
Python 3.5.1

real  0m3.110s
user  0m2.982s
sys   0m0.026s
Le plus gros problème avec Py peut être vu d'un coup d'œil : plus vous la mise à niveau, plus cela devient lent. Et ce qui est terrible, c'est que de nombreuses syntaxes sont incompatibles, mais il est généralement bon d'écrire des algorithmes et des petits programmes. À d'autres moments, oubliez ça et utilisez Go.

3. PHP, je l'utilise beaucoup au travail, je dois donc le comparer


<?php
function fibonacci($i){
  if($i<2) return $i;
  return fibonacci($i-2) + fibonacci($i-1);
}
echo fibonacci(34);
Puisque j'utilise principalement php5.4 pour mon travail , donc la vague vient en premier :


qiangjian@localhost:/works/learnCPP$ php54 -v && time php54 fib.php 
PHP 5.4.43 (cli) (built: Dec 21 2016 12:01:59) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
real  0m2.288s
user  0m2.248s
sys   0m0.021s
L'environnement de test est 5.6, donc la vague vient aussi :


qiangjian@localhost:/works/learnCPP$ php -v && time php fib.php 
PHP 5.6.28 (cli) (built: Dec 6 2016 12:38:54) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
real  0m2.307s
user  0m2.278s
sys   0m0.017s
Les nouveaux projets et les choses que vous jouez vous-même sont tous en php7, veuillez consulter :


qiangjian@localhost:/works/learnCPP$ php -v && time php fib.php
PHP 7.1.2 (cli) (built: Feb 17 2017 10:52:17) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
5702887
real  0m0.815s
user  0m0.780s
sys   0m0.015s
Je pense que php7 et 5 sont complètement différents, pas du tout la même chose, et les progrès sont énormes, je compte sur Brother Bird pour me donner un coup de pouce ! Il est recommandé à tout le monde d'utiliser php7.

4.C est ma base théorique préférée Bien sûr, je parle du C 11/14, pas du vieux c99 antique etc.


Utilisez d'abord g 6.2 sans optimisation et jetez un œil :
#include <iostream>
 
constexpr int fibonacci(const int i){
  if(i<2) return i;
  return fibonacci(i-2) + fibonacci(i-1);
}
 
int main() {
  fibonacci(34);
  return 0;
}


Après avoir ajouté l'optimisation -O2,
qiangjian@localhost:/works/learnCPP$ time g++-6 -o a.bin main.cpp && time ./a.bin 

real  0m0.378s
user  0m0.254s
sys   0m0.104s

real  0m0.050s
user  0m0.043s
sys   0m0.002s


L'effet est toujours très évident, et la durée d'exécution n'est que la moitié de l'ancienne.
qiangjian@localhost:/works/learnCPP$ time g++-6 -O2 -o a.bin main.cpp && time ./a.bin 

real  0m0.874s
user  0m0.344s
sys   0m0.180s

real  0m0.034s
user  0m0.019s
sys   0m0.004s

5. C a également écrit un


sans optimisation :
#include <stdio.h>
 
int fibonacci(int i){
  if(i<2) return i;
  return fibonacci(i-2) + fibonacci(i-1);
}
int main(){
  printf("%d",fibonacci(34));
}


Ajouter une optimisation -O2 :
qiangjian@localhost:/works/learnCPP$ time gcc-6 -o c.bin fib.c && time ./c.bin 

real  0m0.341s
user  0m0.063s
sys   0m0.101s
real  0m0.049s
user  0m0.044s
sys   0m0.002s


Identique au C 14, la vitesse est évidemment améliorée après optimisation, deux fois plus rapide.
qiangjian@localhost:/works/learnCPP$ time gcc-6 -O2 -o c.bin fib.c && time ./c.bin 

real  0m0.143s
user  0m0.065s
sys   0m0.034s
real  0m0.034s
user  0m0.028s
sys   0m0.002s

6. Java est ce que j'ai le moins envie d'écrire Bien qu'il soit très populaire, il semble trop gonflé


Le résultat de la compilation et. en cours d'exécution est :
class Fib{
  public  static void main(String[] args){
    System.out.println(fibonacci(34));
 
  }
 
  static int fibonacci( int i){
    if(i<2) return i;
    return fibonacci(i-2) + fibonacci(i-1);
  }
}


Les performances sont correctes, mais le temps de compilation est trop faible par rapport à c/go.
qiangjian@localhost:/works/learnCPP$ java -version && time javac Fib.java && time java Fib 
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

real  0m0.952s
user  0m1.302s
sys   0m0.144s

real  0m0.150s
user  0m0.123s
sys   0m0.025s

7. Bien sûr, le dernier à apparaître est le toujours populaire

javascript

, non, pour être précis, c'est Nodejs (cette chose n'a rien à voir avec java)


Résultat :
function fibonacci(i){
  if(i<2) return i;
  return fibonacci(i-2) + fibonacci(i-1);
}
console.log(fibonacci(34))


Le résultat est toujours choquant, cela ne prend que TMD 0,3s, ce qui est moins de 0,3 s au total, soit 0,5 s, presque proche de Java, mais les avantages du volume de code et de la maintenabilité sont vraiment dus à Google, au fils V8 de
qiangjian@localhost:/works/learnCPP$ node -v && time node fib.js 
v6.10.0

real  0m0.332s
user  0m0.161s
sys   0m0.062s
Chr

omium et à la communauté open source. Si Nodejs fonctionne vraiment de manière stable, il ne sera peut-être pas vraiment capable d'unifier le "monde des programmes". Bien sûr, je ne fais que parler, ne le prenez pas trop au sérieux.

Prenons une photo :

Analyse détaillée d'exemples de codes pour comparer les performances de Golang, Python, PHP, C, C, Java et NodejsRésumé :

J'ai l'impression que chaque langue a des usages différents, et la performance n'est qu'un indicateur unique . Ce que j'apprécie le plus, c'est : la lisibilité, la maintenabilité, la portabilité, la robustesse, l'évolutivité, puis les performances. De plus, le matériel moderne est de plus en plus puissant. Les téléphones portables sont souvent équipés de 8G, les CPU ont rattrapé les CPU des PC il y a 5 ans et les SSD sont de plus en plus populaires... Je suis plus optimiste à propos de Golang/php/python, et je fais également attention au C moderne, comme 14 et 17. Quant à rust,

swift

, java, scala, oubliez ça, cela dépend principalement des besoins personnels liés à la pile technologique de l’entreprise. Ha ha ! Écrivons ceci d’abord !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn