Dopo aver confrontato l'efficienza degli script in diversi linguaggi di programmazione, come ad esempio lo studio Benchmark performance C, Python, MATLAB - GNU Octave, JavaScript, PHP, vediamo ora per quanto riguarda il Bash, la shell di Unix.
Vista la sintassi non proprio "User Friendly" e con alcune limitazioni (es. definire alcune operazioni matematiche in bash), l'esempio in questione non può essere quello del caso della gaussiana, confrontandolo quindi con gli altri linguaggi, ma prendiamo un codice semplicissimo, si parte da x=0 e in un ciclo con N=106 si effettua la semplice operazione x=x+1.
Sono stati studiati i seguenti casi:
- codice C
- codice Python
- bash script, richiamato da file
- bash script, nella shell
I risultati sono talmente spaventosi da rendere quasi difficile l'assegnazione di un valore "N" ragionevole per fare il confronto! Vediamo il codice nei vari casi:
- codice C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
clock_t start = clock();
register int x=0;
register int i;
for(i=0;i<1000000;i++){
x+=1;
}
clock_t end = clock();
printf("%f\n",(float)(end-start)/CLOCKS_PER_SEC);
return 0;
}
- codice Python (3.9.2):
import time
start=time.time()
x=0
for i in range(1000000):
x=x+1
end=time.time()
print(end-start,"s")
- bash script, nel file test.sh (quindi poi da terminale, per vedere il tempo di esecuzione: times bash ./test.sh):
let x=0
for((i=0;i<1000000;i++))
do let x+=1
done
- bash script direttamente in console (si fa poi la differenza fra tempo finale e tempo iniziale):
times let x=0;for((i=0;i<1000000;i++)); do let x+=1;done;times
Risultati: come accennato, i risultati sono spaventosi!
- codice C: tempo di esecuzione 0,0005%0,0007 secondi. Valori talmente piccoli che risultano soggetti ad oscillazione, quindi prendiamo N=109 cioè 1000 volte più grande, risulta 0,326. Quindi rapportato a N=106 possiamo dire in media 0,000326 secondi
- codice python: tempo di esecuzione 0,1 secondi
- bash script, richiamato da file: tempo di esecuzione circa 4,75 secondi
- bash script, nella shell: tempo di esecuzione circa 4,75 secondi (quindi uguale al caso precedente)
Conclusioni: da questi numeri, risulta che per questo algoritmo:
- C si è dimostrato 300 volte più veloce di Python (nel benchmark della gaussiana invece C era risultato 67 volte più veloce di Python)
- C si è dimostrato 14500 volte più veloce di uno script bash!!!
- Python per questo algoritmo si è dimostrato circa 50 volte più veloce di bash