Domanda

In primo luogo -. Questo non vuole essere un 'che è meglio, ignorante filo guerra non ionico' ... Ma l'aiuto, piuttosto, io in genere bisogno di fare un'architettura decisione / argomento di proporre al mio capo

Saltare i dettagli - ho semplicemente piacerebbe sapere e trovare i risultati di chi ha fatto alcuni confronti prestazionali di Shell vs [Inserire General Purpose linguaggio di programmazione (interpretato) qui), come C # o Java ...

A sorpresa, ho trascorso qualche tempo su Google a cercare qui di non trovare qualsiasi di questi dati. Qualcuno ha mai fatto queste comparazioni, in diversi casi d'uso; colpendo un database come in un XYX ° in loop facendo diversi tipi di SQL (Oracle pref, ma MSSQL farebbe) interroga, come uno qualsiasi dei ops CRUD - e, inoltre, non colpire database e solo regolare confronto 50k tipo ad anello a fare diversi tipi di calcoli , e cose del genere?

In particolare - per ora, ho bisogno di un confronto di colpire un DB Oracle da uno script di shell vs, consente di dire C # (ancora una volta, eventuali questo è GPPL interpretati andrebbe bene, anche quelli di più alto livello come Python). Ma ho anche bisogno di sapere su standard di calcoli di programmazione / istruzioni / etc ...

Prima di chiedere 'perché non basta scrivere un rapido test te stesso? La risposta è: Sono stato uno sviluppatore di Windows tutta la mia vita / carriera e avere conoscenza di Shell scripting molto limitata - per non parlare di * nix nel suo insieme .... Così facendo la domanda qui da più ragazzi esperti sarebbero grealty vantaggioso, per non parlare di risparmio di tempo, come ci troviamo in prossimità crisi termine perputual così com'è;).

È stato utile?

Soluzione

C'era una volta, Ye Olde Il Grande Linguaggio Shootout ha incluso alcuni script di shell.

Quindi, per gentile concessione del Internet Archive, dal 2004 -

Nota gli script di shell non ha avuto programmi per molti dei test.

    Score Missing-Tests

Java 20     1

Perl 16     0

Python 16   0

gawk 12     6 

mawk 10     6 

bash 7      12  

Nota gli script di shell può essere a volte piccolo e veloce :-)

"Reverse un file"

        CPU (sec)   Mem (KB)    Lines Code

bash    0.0670      1464        1

C gcc   0.0810    4064        59

Python  0.3869    13160       6

Altri suggerimenti

E 'molto dipende da ciò che lo script sta facendo. Ho visto gli script di shell scritti male accelerato per una, due anche tre ordini di grandezza, rendendo semplice modifiche.

In genere, uno script di shell è semplicemente una logica di colla che gestisce programmi di utilità che di solito sono compilati C o C ++. Se questo è il caso, potrebbe non esserci molto che si può fare per accelerare le cose in su. Se il lavoro sporco è stato fatto da un programma di utilità scritta male che è compilato, è solo facendo un sacco di fatica sprecata veramente veloce.

Detto questo, Python o Perl stanno per essere molto più veloce di uno script di shell, ma un codice macchina virtuale o nativo sarà più veloce ancora.

Dal momento che non ci può dire tutti i dettagli, non possiamo davvero fornire un aiuto specifico.

Se volete vedere una semplice dimostrazione per il confronto, provare la mia implementazione puro-Bash di hexdump e confrontarlo con quello vero:

$ 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

Una delle principali ragioni per cui la versione di Bash è lenta è che legge il carattere di file per carattere che è necessario per byte nulli maniglia (gusci non sono molto bravo a gestire i dati binari), ma il motivo principale è la velocità di esecuzione. Ecco un esempio di un Python script che ho trovato :

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

I semplicemente piacerebbe sapere e trovare i risultati di chi ha fatto alcuni confronti di performance di ...

La lezione costante di tali confronti è che i dettagli questione particolare -. Un sacco

Non solo i dettagli particolari del compito, ma (non dovremmo sapere questo come i programmatori) i dettagli particolari di come lo script di shell viene scritto.

Così si può trovare qualcuno che capisce che il linguaggio della shell e in grado di controllare che shell script è stato scritto in modo efficiente? (Non sarebbe bello se cambiando un paio di righe prese da 40 minuti a 5 minuti).

Anche se questo non include "Shell" (aka sh / bash / ksh / PowerScript) lingue, si tratta di un relativamente grande lista di "lingua [realizzazione] performance" - pieno zeppo con generalità e avvertimenti. In ogni caso, qualcuno potrebbe godere.

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

Se si sta scrivendo codice e avete preoccupazioni circa la velocità di elaborazione, si dovrebbe scrivere il codice che viene sia compilato direttamente al montaggio o compilato per una VM moderna.

Ma ... con la Legge di Moore sollevando la potenza di elaborazione ogni 18 mesi, mi chiedo: sono i requisiti di prestazione davvero necessario? Anche interpretato esegue il codice incredibilmente veloce sulla maggior parte dei sistemi moderni, ed è solo andando a stare meglio con il tempo. Avete veramente bisogno di quel tipo di miglioramenti di velocità che il codice compilato darebbe?

Se la risposta è no, allora scrivere in qualsiasi che ti rende felice.

Come accennato in precedenza, non sarà in grado di fare query SQL dalle coperture. Lingue che gira su una macchina virtuale vorrà un po 'di tempo in anticipo a causa del fattore VM ma per il resto la differenza dovrebbe essere trascurabile.

Se la domanda è in realtà per ridurlo da 40 a 5 minuti in cui cercherò di scoprire quale pezzo sta prendendo la maggior parte del tempo. Se la query è in corsa per il più lungo tempo, allora la lingua di commutazione non vi aiuterà molto.

Ancora una volta (senza molto dettaglio nella domanda) Vorrei iniziare con esaminando diverse componenti del sistema per vedere quale è il collo di bottiglia.

Appena fatto questo molto semplice punto di riferimento sul mio sistema, ed i risultati sono come previsto.

Sommate tutti i numeri interi compresi tra 1 e 50.000 e la risposta in uscita ad ogni passo

Bash: 3 secondi C: 0,5 secondi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top