Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 11-01-2015 23:40:23

Slyfox
Membre
Lieu : Pays du chocolat
Distrib. : GNU/Linux Debian Sid
Noyau : Linux 4.7.0-1-amd64
(G)UI : MATE
Inscription : 15-12-2013

Test compteur Bash, Python, C

Bonjour,

Comme j'avais un peu de temps à perdre j'ai fait un test avec Bash, Python et C avec un "programme" qui compte de 0 à 10 000 000.

Voici le code Bash :

#!/bin/bash

compteur=0

while ((compteur!=10000000))
do
     echo "$compteur"
     ((compteur+=1))
done



Voici le code Python :

#!/usr/bin/env python3

compteur = 1
while compteur<10000000:

    print(compteur)
    compteur += 1  



et voici le code en C :

#include <stdio.h>
#include <stdlib.h>

int main()
{
int compteur = 0;
while (compteur < 10000000)
{
    printf("%d\n", compteur);
    compteur++;
}
}



Je les ai lancé les un après les autres dans un Terminal et au même moment j'ai enclenché un chronomètre jusqu'à ce qu'ils arrivent à 10 000 000.

Résultat :
Bash --> 4 minutes 54 secondes
Python --> 2 minutes 48 secondes
C --> 2minutes 47 secondes

Alors pourquoi Bash est-il aussi long ? hmm

Amicalement Slyfox

Dernière modification par Slyfox (11-01-2015 23:45:15)

Hors ligne

#2 12-01-2015 01:57:56

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : Test compteur Bash, Python, C

time ./script.sh >/dev/null



Bash avec ton script :

./test.sh > /dev/null  134,01s user 2,03s system 99% cpu 2:16,18 total



Bash avec la version POSIX :

./test-shell.sh > /dev/null  210,14s user 2,48s system 99% cpu 3:32,83 total



Dash avec la version POSIX :

./test-shell.sh > /dev/null  41,09s user 2,04s system 99% cpu 43,173 total



Zsh avec la version POSIX :

./test-shell.sh > /dev/null  108,02s user 10,30s system 99% cpu 1:58,47 total



NB: version posix :

#!/bin/sh

compteur=0

while [ $compteur -ne 10000000 ]
do
     echo "$compteur"
     compteur=$(($compteur+1))
done



NB2: l'affichage peut changer le temps d'exécution.


Après, pourquoi bash est moins rapide… C'est une histoire d'implémentation, il peut y avoir un millier de raisons…


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#3 12-01-2015 08:08:33

stephgarg
Membre
Lieu : Périgueux
Distrib. : Debian GNU/Linux Stable (Jessie)
Noyau : Linux 3.16.0-4-amd64
(G)UI : KDE 4.14.2
Inscription : 01-01-2015

Re : Test compteur Bash, Python, C

Bonjour à tout.

Pour rester sur la question - qui s'apparente à "Quel est le langage de programmation le plus rapide au niveau de l'exécution ?" et si cela vous intéresse, je vous propose le lien suivant http://benchmarksgame.alioth.debian.org/.

Cette page vous propose un comparatif entre les divers langages - dont C, C++, Java, Perl, Python - et sur diverses configurations - ça va du i386 mono-coeur au amd64 quadri-coeur - à propos de la rapidité d'exécution.

A bientôt.

Trois PC dont un fixe Sirius, un transportable Canopus et un miniportable Arcturus. smile
Sirius : AMD Athlon 64 X2 à 3 GHz, SDRAM DDR2 800 MHz de 8 Gio, 2 WD VelociRaptor SATA2 de 1000 Go.
Canopus : Intel Core 2 Duo à 2 GHz, SDRAM DDR2 667 MHz de 4 Gio, WD Black Mobile SATA2 de 750 Go.
Arcturus : Intel Atom N270 à 1,6 Ghz, SDRAM DDR2 533 MHz de 2 Gio, Hitachi SATA2 de 160 Go.

Hors ligne

#4 14-01-2015 00:14:21

zoroastre74
Membre
Distrib. : Debian Wheezy
Noyau : Linux 3.2
(G)UI : Awesome wm v3.4.13 (Octopus)
Inscription : 28-08-2010

Re : Test compteur Bash, Python, C

Yep!

Le langage le plus rapide est celui qui se rapprochera le plus près du langage machine. A partir du moment où un code doit être interprété, passer par une machine virtuelle, être parfois transformé, il prend naturellement un certain temps avant d'être intégré aux jeux de mémoires et d'adresses du hardware.

Il faut aussi admettre que chaque langage de programmation a ses avantages et défauts. Si on veut faire quelque chose sérieux, on s'orientera vers le C/C++, si on a besoin de souplesse, de rapidité, le python, le bash, si on recherche des performances en calcul, le perl, si on veut écrire un truc qui marche sans se prendre la tête, le java. etc.

Sans remettre en cause le test ci dessus, il aurait été plus intéressant de voir comment les différents compilateurs optimisaient leur code. On se rendrait rapidement compte que l'optimisation est excellente pour du C/C++ et quasi inexistante pour le Java.

@+

Zoroastre.

Hors ligne

#5 14-01-2015 00:25:18

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : Test compteur Bash, Python, C

Mhh, en fait, un langage très bas niveau ne sera pas forcément plus efficace qu'un langage haut niveau. La phase de compilation ou interprétation est très importante et peut changer du tout au tout les performances. De même, les bibliothèques de fonctions existantes peuvent orienter très fortement le choix du langage…

Je ne suis pas vraiment d'accord avec ton « sérieux => C ou C++ ». Je dirais même que maintenant, c'est un peu le contraire…
Utiliser un langage de haut niveau évite de réinventer la roue et de reproduire une 1001ème fois les erreurs de codage/gestion de la mémoire/etc. inhérente à ces langages.

À peu près tous les langages peuvent être utilisés pour les trucs sérieux. (Je ne considère pas vraiment le langage Shell comme un langage de programmation ici)
L'important est de bien maîtriser les primitives de son langage, et la complexités de chacune d'entre elles.

En ce qui concerne les benchmark donnés en lien ou que j'ai donné en exemple, il ne faut pas oublier que ce n'est pas le langage qui est testé, mais une implémentation donnée d'un algorithme donné avec un interpréteur ou un compilateur donné. Donc, on ne teste que des cas très particuliers, pas l'ensemble du langage smile

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#6 14-01-2015 10:03:14

paskal
autobahn
Lieu : ailleurs
Inscription : 14-06-2011
Site Web

Re : Test compteur Bash, Python, C

Perso, je pense que le sérieux se trouve du côté du programmeur.
Après, certains préfèreront Ada, PL/M ou Smalltalk, et d'autres Pascal, APL ou Visual Basic etc.
Je me souviens avoir développé quelque chose d'assez "sensible" en basic mixé avec du langage d'assemblage, sur BBC Acorn.  lol

I'd love to change the world
But I don't know what to do
So I'll leave it up to you...

logo-sur-fond.png

Hors ligne

Pied de page des forums