W wielu dystrybucjach linuxa bash jest używany jako standardowy shell do wykonywania skryptów, dlaczego to nie jest najlepszy pomysł, zobaczycie poniżej.
Do konkursu przystąpili:
- bash 3.2.39
- tcsh 6.15
- mksh R36
- ksh93 20081104
- freebsd 7.0 /bin/sh
Testy wykonywane były na maszynie z procesorem athlon64 4200+ i 2GB ramu 800MHz CL4.
Jako system operacyjny posłużył FreeBSD 7.0 i386. Testowane powłoki były kompilowane z flagami -O2 -march=athlon-mp. Każdy pomiar był powtórzony trzy razy, po czym wyciągana była średnia. Komputer pomiędzy pojedynczymi pomiarami był restartowany.
Za skrypt testowy posłuży nam prosta pętla for wykonywana 1 000 000 i 10 000 000 razy.
Wyniki:
1 000 000 | 10 000 000 | |
bash | 8.03s | 89.42s |
tcsh | 30.26s | 303.10s |
mksh | 2.19s | 21.73s |
ksh93 | 1.63s | 16.37s |
sh | 1.60s | 16.38s |
Jak widać bash wypada tutaj dość słabo, wiec nie rozumiem dlaczego właśnie w nim wykonywane są skrypty w wielu dystrybucjach, jedynym wytłumaczeniem może być to, ze deweloperzy chcą zachować maksymalna kompatybilność ze skryptami, które w tym shellu mogą być wykonywane. Dobrym wyjściem z sytuacji jest metoda użyta we FreeBSD, gdzie większość skryptów jest uruchamianych przez /bin/sh, natomiast bash jest wykorzystywany tylko, gdy występują błędy przy uruchomieniu na /bin/sh. Wyników uzyskanych przez tcsh nie komentuję.
Artykułem tym chciałem wykazać ze nie powinno się używać basha do uruchamiania skryptów, bo oczywiście nie zauważymy różnicy w wydajności podczas pracy w trybie interaktywnym miedzy żadną para porównywanych powłok. Oczywiście rzadko tez się zdarza aby w skrypcie pętla była wykonywana 1 000 000 razy, jednak trzeba mieć na uwadze, ze skrypty maja zwykle więcej linii niż ten testowy.
Archiwalny news dodany przez użytkownika: Magik.
Kliknij tutaj by zobaczyć archiwalne komentarze.