Comparaison des performances des scripts Shell vs haut niveau qu'interprétées Langs (C # / Java / etc.)

StackOverflow https://stackoverflow.com/questions/4491908

Question

D'abord -. Ce ne vise pas à être un « ce qui est mieux, fil de guerre non ionique ignorant » ... Mais plutôt, il me faut généralement aider à prendre une décision d'architecture / argument présenté à mon patron

Skipping les détails - je tout simplement aimerais connaître et trouver les résultats de tous ceux qui ont fait des comparaisons de performance de Shell vs [Insérer usage général Langage de programmation (interprété) ici), comme C # ou Java ...

Étonnamment, j'ai passé un peu de temps sur Google sur la recherche ici pour trouver aucune de ces données. Quelqu'un at-il jamais fait ces comparaisons, dans les différents cas d'utilisation; frapper une base de données comme dans un XYX # de boucles faisant différents types de SQL (Oracle pref, mais MSSQL ferait) des requêtes telles que l'une des opérations CRUD - et pas non plus la base de données frapper et juste comparaison régulière de type boucle de 50k faire différents types de calculs , et les choses de cette nature?

En particulier - pour le moment, je dois une comparaison de frapper un Oracle DB à partir d'un script shell vs, permet de dire que C # (encore une fois, tout thats GPPL interprété serait bien, même ceux de plus haut niveau comme Python). Mais je dois aussi savoir sur les calculs de programmation standard / instructions / etc ...

Avant de vous demander « pourquoi ne pas simplement écrire un test rapide vous? La réponse est: Je suis un développeur de Windows toute ma vie / carrière et ont une connaissance très limitée de scripts Shell - sans parler * nix dans son ensemble .... Donc poser la question ici de plus les gars expérimentés seraient grealty bénéfique, sans parler de gain de temps que nous sommes en crise du délai près perputual tel qu'il est;).

Était-ce utile?

La solution

Il était une fois, vous OLDE Le langage informatique Grand Shootout a inclus quelques scripts shell.

Alors, avec la permission du Internet Archive, à partir de 2004 -

Remarque les scripts shell n'a pas de programmes pour la plupart des tests.

    Score Missing-Tests

Java 20     1

Perl 16     0

Python 16   0

gawk 12     6 

mawk 10     6 

bash 7      12  

Remarque scripts shell peut parfois être petit et rapide :-)

"Inverser un fichier"

        CPU (sec)   Mem (KB)    Lines Code

bash    0.0670      1464        1

C gcc   0.0810    4064        59

Python  0.3869    13160       6

Autres conseils

Il dépend fortement de ce que fait le script. Je l'ai vu des scripts shell mal écrits par un filaient, deux voire trois ordres de grandeur en faisant simples modifications.

En règle générale, un script shell est tout simplement une certaine logique de colle qui va utilitaires qui sont généralement compilés en C ou C ++. Si tel est le cas, il ne peut pas être beaucoup qui peut être fait pour accélérer les choses. Si le travail grunt est fait par un utilitaire mal écrit qui est compilé, il fait juste beaucoup d'efforts gaspillés très vite.

Cela dit, Python ou Perl vont être beaucoup plus rapide qu'un script shell, mais un code VM ou natif sera plus rapide encore.

Puisque vous ne pouvez pas nous dire tous les détails, nous ne pouvons pas vraiment fournir une aide spécifique.

Si vous voulez voir une démonstration simple de comparaison, essayez mon la mise en œuvre pure Bash de hexdump et de le comparer à la vraie chose:

$ time ./bash-hexdump /bin/bash > /dev/null
real    7m17.577s
user    7m2.570s
sys     0m14.745s
$ time hexdump -C /bin/bash > /dev/null
real    0m2.459s
user    0m2.260s
sys     0m0.176s

L'une des principales raisons pour la version Bash est lente qu'il lit le caractère de fichier par le caractère qui est nécessaire pour gérer les octets nuls (coquilles ne sont pas très bons à manipuler des données binaires), mais la principale raison est la vitesse de exécution. Voici un exemple de un script Python j'ai trouvé :

$ time ./hexdump.py /bin/bash > /dev/null
real    0m11.694s
user    0m11.605s
sys     0m0.040s
  

Je voudrais tout simplement savoir et l'amour   trouver les résultats de toute personne qui a   fait des comparaisons de performance   de ...

La leçon de ces comparaisons respectueux est que les détails particuliers - matière. Beaucoup

Non seulement les détails particuliers de la tâche, mais (ne devrait pas nous savons ce que les programmeurs) les détails particuliers de la façon dont est écrit le script shell.

Pouvez-vous trouver quelqu'un qui comprend que le langage du shell et peut vérifier que script shell a été écrit de manière efficace? (Ce ne serait pas bien si changer quelques lignes qu'il a fallu de 40 minutes à 5 minutes.)

Bien que cela ne comprend pas « Shell » (alias sh / bash / ksh / PowerScript) langues, il est une liste relativement importante de « langue [mise en œuvre] performance » - emballé plein de généralités et mises en garde. Dans tous les cas, une personne peut en profiter.

http://benchmarksgame.alioth.debian.org/

Si vous écrivez du code et vous avez des préoccupations au sujet de la vitesse de traitement, vous devez écrire du code soit compilé directement à l'assemblage ou compilé pour une machine virtuelle moderne.

Mais ... avec la loi de Moore coups de pied jusqu'à la puissance de traitement tous les 18 mois, je me demande: les exigences de performance vraiment nécessaire? Même interprété exécute le code incroyablement rapide sur la plupart des systèmes modernes, et il ne va s'améliorer avec le temps. Avez-vous vraiment besoin du genre d'améliorations de la vitesse que le code compilé vous donnerait?

Si la réponse est non, alors écrire dans tout ce qui vous rend heureux.

Comme mentionné ci-dessus, vous ne serez pas en mesure de faire des requêtes SQL de shell. Langues qui fonctionne sur une machine virtuelle prendra un peu de temps dès le départ à cause du facteur VM mais sinon la différence devrait être négligeable.

Si la question est vraiment à elle diminuer de 40 à 5 minutes que je vais essayer de savoir quelle pièce prend la majorité du temps. Si la requête est en cours d'exécution pour le temps le plus long alors changement de langue ne vous aidera pas beaucoup.

Encore une fois (sans beaucoup de détails dans la question) Je commence par la recherche dans différents composants du système pour voir lequel est le goulot d'étranglement.

Juste a fait référence très simple sur mon système, et les résultats sont comme prévu.

Additionnez tous les nombres entiers compris entre 1 et 50 000 et la réponse de sortie à chaque étape

Bash: 3 secondes C: 0,5 secondes

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top